使用VisualStudio2022插件(Visual Studio Installer Projects 2022)打包 .Net 6/.Net 8 框架下的 WPF项目 为 msi安装文件
更新说明(2024/11/29)
增加了Installer Projects 项目内主要参数的设定说明(第4节)。
更新说明(2024/01/22)
当时写这篇博客的时候,刚接触 .Net 6,好多事情没搞清楚,按当初博文中的方法,能用,但还是有些问题。现在框架已经推出到 .Net 8 了,我也更新一下内容,不能误人子弟。对于新手而言,在打包上走的弯路挺多的了,老被卡在这没什么意思,没什么好藏着掖着的,一个打包不应该耗费这么多精力。
这次拿真正的项目,为大家做次示范。其中,WpfMain 是主程序,WpfPluginManager 是升级程序,Infrastructure文件夹 内是自己编写的通用类库,MEFPlugins文件夹 内是程序插件集合。
本次打包的范围是:
“WpfMain”主程序项目、“WpfPluginManager”升级程序项目,以及2个项目关联的相关类库。
强烈建议:对于初学者,在添加Setup Project项目之前,先将整个解决方案生成一遍。
本解决方案的生成方式为:Release -- x64 (不是默认的Debug -- Any CPU)
本解决方案的项目结构如下:
序言
使用 VisualStudio 插件(Visual Studio Installer Projects)进行打包(即将项目打包为 *.msi 或者 *.exe 文件)的教程非常多,这些教程大方向是对的,但是对于 .Net 6框架下的WPF项目则并不完全适用。这是一层窗户纸,一捅就破。自己实践了很多次,特记录下来,希望能帮助到还在困惑的朋友。
一、还是安装Visual Studio Installer Projects 2022插件
这一步,以往的教程都没有问题,照做就是了。
方式1:VS主界面--扩展--管理扩展--搜索VS插件“Visual Studio Installer Projects 2022”并安装。
方式2:直接下载安装,网址:https://marketplace.visualstudio.com/items?itemName=VisualStudioClient.MicrosoftVisualStudio2022InstallerProjects
二、创建Setup Project项目
2.1 在现有解决方案中添加Setup Project项目
解决方案上点右键--添加--新建项目--选择Setup Project项目
2.2(更新)添加需要打包的文件
2.2.1 准备添加输出项。
进入新创建的WpfSteupNew项目,选择 Application Folder 文件夹,随后在该文件夹上点击鼠标右键,选择 Add -- 项目输出(P)。
2.2.2 【核心】添加 WpfMain 项目输出。
从这一步开始,和以往的教程相比,就会有细节上的变化。
在 添加项目输出组 对话框,选择如下:
- 项目 选择为 WpfMain
- 输出类型 选择为 发布项(必须选择【发布项】,不能选择【主输出】)
- 配置(C) 选择为 Release X64(因为之前解决方案生成方式就是:Release -- x64 )
随后点击 确定 按钮,添加为如下情况:
2.2.3 添加 WpfPluginManager 项目输出。
按 2.2.2 步骤,添加 WpfPluginManager 项目。
在 添加项目输出组 对话框,选择如下:
- 项目 选择为 WpfPluginManager
- 输出类型 选择为 发布项(必须选择【发布项】,不能选择【主输出】)
- 配置(C) 选择为 Release X64(因为之前解决方案生成方式就是:Release -- x64 )
两个项目添加完成后情况如下:
2.3 关于引用的问题
2.3.1 关于两个输出项目引用的类库问题
在项目内做好引用的情况下,是不需要再单独添加输出项的。
比如说,WpfMain项目引用了这么多的类库,但是不需要再单独添加输出项。
2.3.2 关于框架引用的问题
简单情况下不需要特别指定。-- 说人话就是:此步跳过即可。
如果需要指定,选中WpfSetupNew项目,右键 -- 属性,点击 Prerequisites... 按钮。
选择合适的框架,最后点击确定。
三、创建快捷方式
发布项上点右键--选择 Create Shortcut to 发布项 from XXX(Release X64),生成快捷方式。
如果解决方案在之前没有完整生成过一遍,则很可能没有【Create Shortcut to 发布项 from XXX(Release X64)】这个选项。
快捷方式上点右键--重命名,改成你想要的名字。
随后将快捷方式拖到User’s Destop目录下,并进入User’s Destop目录。
3.1 为快捷方式选定图标
选择改好名字的快捷方式--看到窗口右下角的属性栏--找到“Icon”项目--点击右侧下拉箭头--选择“Browse”。
在弹出窗体上继续选择Browse。
在新的弹出窗口中,双击进入Application Folder文件夹。
点击Add File按钮,添加图标文件。随后点击OK按钮。
3.2 添加卸载程序和卸载程序快捷方式(非必须)
这一部分内容,请参阅《Visual Studio 2022 WinForm/Wpf打包安装程序》2.5、2.6节。
https://blog.csdn.net/wu_zongwen/article/details/126507135
四、设定参数
有6个主要用到的参数
1.ProductCode:产品代码。软件的每个版本,此值都应不同。(产品代码还关系到前面卸载程序的设置)
2.ProductName:产品名称。该程序在【控制面板】中的显示名称。
3.RemovePreviousVersions:是否允许在安装时移除旧版本。默认为False,建议改为True。
4.TargetPlatform:目标平台选择。是x86还是x64,要分清楚。
5.UpgradeCode:升级代码。软件的每个版本,此值都应相同。(升级代码相同的被认为是同一软件)
6.Version:软件版本号。
如果想c#安装包在新版本安装时自动替换旧版本、无需卸载,需要满足下列条件:
1、确认两个版本的RemovePreviousVersion都设置为true。
2、确认两个版本有不同的ProductCode和相同的UpgradeCode。
3、确认后一个版本的Version比前一个版本的大。
更细节的参考这篇文章:
VS自带的打包工具,实现覆盖安装终极总结 - 卡萨丁·周 - 博客园
五、生成Setup Project项目
在解决方案管理器,选择SetupProject项目。
SetupProject项目右键--生成
SetupProject项目右键--在文件资源管理器中打开文件夹--双击进入Debug文件夹,即可看到生成的文件。
至此,安装项目生成完毕。