使用 Velopack 快速部署和更新 C# 桌面应用程序
部署和更新跨平台桌面应用程序历来是开发过程中最令人头疼的部分之一。 但是,正如 Tim Corey 在他的视频"使用 Velopack 快速部署和更新 C# 桌面应用程序"中所解释的那样,这个过程现在可以变得非常简单。
Velopack 是一款神奇的工具,可处理从构建软件包到应用更新的所有事务,开发人员现在只需使用 一条命令 即可创建、部署和维护应用程序,而无需复杂的构建管道或无尽的配置文件。
在本文中,我们将对 Tim 的整个 32 分钟教程进行详细解读,内容包括如何使用 Velopack 将标准 C# WPF 应用程序转化为自我更新的便携式软件包。 我们还将了解它如何支持自动迁移、代码签名和多平台零配置设置,同时保持本地性能。
简介:为什么选择 Velopack?
Tim 首先解释说,部署和更新桌面应用程序并不难,事实上,它可以 "非常容易"。他在本视频中的目标是展示 Velopack 如何通过打包 WPF 应用程序、创建安装程序和启用自动更新来简化这一过程,只需最少的配置。
他强调,这并不局限于 WPF - 同样的流程也适用于 WinForms、控制台应用程序,甚至是 Java、Rust 或 C++ 等非 .NET 软件。 Velopack 支持为几乎所有语言或框架构建软件包,是当今跨平台应用程序的最佳安装框架之一。
创建 WPF 项目
Tim 从 Visual Studio 2022 开始,创建了一个名为 DeployDemo 的简单 WPF 项目。 该项目以 .NET 9 为目标,但正如他所指出的,它在 .NET 10 等新版本上也能完美运行。
初始构建只是一个小型应用程序,用于演示完整的部署和更新过程。 虽然他使用的是 WPF,但他反复强调,Velopack 同样适用于跨平台桌面应用程序,因此它是适用于所有类型 .NET 甚至非 .NET 项目的单一解决方案。
将 Velopack 安装为全局工具
接下来,蒂姆打开终端,输入
dotnet tool install -g vpk该命令可在系统中全局安装 Velopack,使开发人员能够在任何地方运行 Velopack 命令。
蒂姆称这一步为 "秘诀",因为 Velopack 会从您的项目中获取编译器输出,并将其转换为可自我更新的便携式软件包。 这一步将为您的应用程序提供专业的安装程序和自动更新框架--两者合二为一。
他解释说,命令行不仅简化了设置,还能轻松集成到 CI/CD 管道中,因此开发人员无需额外的脚本就能自动打包、创建发布和部署。只需一条命令就能实现自动化,这意味着开发人员可以节省宝贵的时间,同时保持构建的一致性。
安装 Velopack NuGet 软件包
在 Visual Studio 中,Tim 打开 Manage NuGet Packages 并安装 Velopack 软件包。
他解释说,Velopack 是之前流行的安装框架 Squirrel 的后继者。 如果您使用过 Squirrel,Velopack 可以自动迁移您的现有设置--提供更高的可靠性、更快的构建速度和更好的跨平台兼容性。
Velopack 可以制作 Windows、Linux 和 macOS 的桌面安装程序,支持 C#、Rust、C++ 和 JavaScript 等各种编程语言。 这是一个用于跨平台应用程序部署的框架,可在不同系统间完美运行。
Tim 强调说,Velopack 是完全免费使用的,没有订阅费或 Professional License 费用,但它提供的专业安装程序框架可与商业解决方案相媲美。
在代码中初始化 Velopack.
在 App.xaml.cs 文件中,Tim 仅用几行代码就添加了一个构造函数并初始化了 Velopack:
new VelopackApp()
.Build()
.Run();new VelopackApp()
.Build()
.Run();这种零配置设置可立即将应用程序连接到 Velopack 的自动更新框架。 虽然这还不能检查更新,但它能让 Velopack 在以后开始管理更新和安装的步骤中发挥性能。
Tim 解释说,尽管这种设置很简单,但它足以使应用程序自我更新,确保用户在终端用户的机器上运行的始终是最新版本。
设计用户界面
在深入更新之前,Tim 构建了一个基本的 WPF 界面。 他创建了一个网格布局,并在右上方放置了一个更新按钮。
起初,一个放错位置的元素导致了错误,但 Tim 利用它提醒了观众布局层次在 WPF 中的重要性。 校正完成后,可安装应用程序的界面看起来干净整洁、大小可调,展示了 Velopack 如何与 WPF 等流行框架完美配合。
然后,他添加了一个 StackPanel,其中包含一个文本框(mainTextBox)和一个提交按钮(submitButton)。 当应用程序运行时,它将显示一个最小的工作用户界面。 这个小项目稍后将用于演示自动更新。
实现更新按钮
现在,Tim 开始讨论功能性问题。 他双击了 Update 按钮,以生成其单击事件。 这将成为自动更新框架的核心。
他解释说,可以将这一过程分为三个阶段--检查、下载和应用更新,但在这个演示中,他将这三个阶段合并为一个事件,使其简单明了。
编写更新逻辑
在 MainWindow.xaml.cs 中,Tim 创建了一个新的 UpdateManager,并将其指向作为更新源的本地路径:
var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");var mgr = new UpdateManager(@"C:\temp\DeployDemoServer");在实际使用中,该路径可能是面向外部应用程序的 HTTPS URL,也可能是用于内部分发的本地文件共享。 Velopack 不需要繁琐的配置,在任何环境下都能无缝运行。
然后,Tim 添加异步代码来处理版本检查和更新:
var newVersion = await mgr.CheckForUpdatesAsync();
if (newVersion == null)
{
MessageBox.Show("You are on the latest version.");
return;
}
await mgr.DownloadUpdatesAsync(newVersion);
await mgr.ApplyUpdatesAndRestartAsync(newVersion);var newVersion = await mgr.CheckForUpdatesAsync();
if (newVersion == null)
{
MessageBox.Show("You are on the latest version.");
return;
}
await mgr.DownloadUpdatesAsync(newVersion);
await mgr.ApplyUpdatesAndRestartAsync(newVersion);该代码会检查最新版本、下载 delta 软件包并立即应用。 Velopack 会处理好一切,一旦更新完成,应用程序就会自动重启。
他解释说,虽然这个演示使用的是按钮点击,但开发人员也可以像专业软件一样,在启动时无声或自动触发这些更新。
发布应用程序
接下来,Tim 演示了如何发布第一个版本。 他使用项目文件夹内的终端,运行
dotnet publish --self-contained -r win-x64 -o ./publish这将生成一个包含 .NET 运行时的独立构建。这意味着应用程序可以在任何终端用户的机器上运行,而无需单独安装 .NET。
Tim 在发布目录中显示了编译后的输出结果(DeployDemo.exe 文件),确认其运行正常。 目前,这只是编译器的输出,还不是打包的可安装版本。
创建安装程序软件包
为了将发布的文件转化为可部署的安装程序,Tim 使用了 Velopack 的 pack 命令:
vpk pack --pack-id DeployDemo --packversion 1.0.0 --pack-directory ./publish这将创建一个 Releases 文件夹,其中包含所有必要文件,包括设置可执行文件。
Tim 将发布文件复制到本地 "服务器 "文件夹中。 运行生成的安装文件可以完全安装应用程序--它会创建快捷方式,在程序和功能列表中添加一个条目,并提供原生安装体验,没有额外的权限或 UAC 提示。
现在,该应用程序已成为由 Velopack 支持的官方可安装应用程序。
更新应用程序
为了模拟更新,Tim 修改了提交按钮的代码:
MessageBox.Show($"Hello {mainTextBox.Text}");MessageBox.Show($"Hello {mainTextBox.Text}");然后,他通过重复相同的发布和打包命令重新打包应用程序,但要使用更新的版本号:
vpk pack --pack-id DeployDemo --packversion 1.0.1 --pack-directory ./publishVelopack 可自动创建 delta 包(用于现有用户的微小差异文件)和用于新安装的完整包。 Tim 指出,完整的软件包约 63 MB,而 delta 软件包只有 132 KB,这证明 Velopack 比其他工具或安装框架更快、更高效。
他将新发布的版本复制到服务器文件夹中,有效地创建了 1.0.1 版本的发布。
应用更新
Tim 重新打开已安装的应用程序,点击更新按钮。 只需几秒钟,Velopack 就能下载并应用 1.0.1 更新--自动重启应用程序。
当他键入自己的姓名并点击提交时,系统会显示"Hello Tim"。更新框架的运行速度快如闪电,这证明 Velopack 可以轻松集成并完美地处理整个更新周期。
他指出,开发人员可以将这些版本托管在 Azure、文件存储或网络存储库上,同样的自动更新逻辑仍可在 Windows、Linux 或 macOS 上运行。
简化的维护和灵活性
Tim 重点介绍了这一过程如何使桌面应用程序的维护变得极其简单。 开发人员可以使用最少的配置和无外部依赖性来部署具有完整自动更新功能的内部工具或公共软件。
Velopack 为 .NET 开发人员提供了熟悉的 API,并能处理每一个步骤:
发布构建
构建软件包
创建版本
应用更新
- 干净利落地卸载
所有这些都不需要复杂的构建管道或深层配置文件。
Tim 称 Velopack 是一款神奇的工具,它可以帮助开发人员节省宝贵的时间,同时交付精良、专业的软件。 这是一个用于跨平台更新的框架,"就是好用"。
卸载和版本跟踪
Tim 演示已安装的应用程序出现在 Windows 的 "卸载或更改程序 "列表中,显示版本为 1.0.1。删除程序非常简单,Velopack 只需删除文件夹,不会留下任何残留物。
他补充说,Velopack 不仅适用于 WPF,也适用于 WinForms、UNO Platform,甚至是较早的 .NET Framework 4.6.2 项目。 它还兼容 Rust 或 JavaScript 等其他流行框架和语言,是跨平台安装程序的通用解决方案。
结论
最后,Tim 表示他对 Velopack 的性能印象非常深刻。 只需几个步骤--安装工具、添加一行代码和运行两个命令--开发人员就可以从一个普通的 .NET 项目变成一个完全可安装、可自我更新的跨平台应用程序。
他衷心感谢 Velopack 开发人员创造了如此伟大的工程作品,称其可能是当今跨平台桌面应用程序的最佳安装和更新框架。
Tim 最后提醒观众,视频描述中提供了所有细节、命令和源代码。 他鼓励开发人员讨论想法、申请功能,并通过公共资源库为项目的未来做出贡献。

