使用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 项目输出。

从这一步开始,和以往的教程相比,就会有细节上的变化。

在 添加项目输出组 对话框,选择如下:

  1. 项目 选择为 WpfMain
  2. 输出类型 选择为 发布项(必须选择【发布项】,不能选择【主输出】)
  3. 配置(C) 选择为 Release X64(因为之前解决方案生成方式就是:Release -- x64 )

随后点击 确定 按钮,添加为如下情况:

2.2.3 添加 WpfPluginManager 项目输出。

按 2.2.2 步骤,添加 WpfPluginManager 项目。

在 添加项目输出组 对话框,选择如下:

  1. 项目 选择为 WpfPluginManager
  2. 输出类型 选择为 发布项(必须选择【发布项】,不能选择【主输出】)
  3. 配置(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文件夹,即可看到生成的文件。

至此,安装项目生成完毕。

posted @ 2023-03-13 08:44  syzcyyx  阅读(4532)  评论(0编辑  收藏  举报