参考:VS2017 WinFrom打包设置与教程

下载 VisualStudio Installer 插件

由于从 VS2017 开始 VS 已不再集成 Installer,所以你需要手动进行安装 VS Installer。

可以在 工具 - 扩展和更新 里面的 Visual Studio Marketplace 搜索并安装 Installer。
image.png
也可以在 Marketplace 下载安装 Microsoft Visual Studio Installer Projects

注:Marketplace 里面它详细的更新历史、文档链接)和 Q&A 等重要内容。

制作打包文件

  1. 右键 解决方案 - 添加 - 新建项目
  2. 选择项目类型 - Visual Studio Installer - Setup Project
    1. 此处 Setup 项目的名称就是打包后的安装程序的名称
  3. 添加主输出:右键 Appliaction Folder - Add - 项目输出

    1. 此处的主输出,就是解决方案中的启动项目

      image.png

  4. 添加快捷方式图标文件:右键 Application Folder - Add - 文件 添加图标文件(推荐大小 64PX)

  5. 右键 主输出 - 创建快捷方式

    image.png

  6. 设置快捷方式属性

    1. 设置快捷方式名称
    2. 设置快捷方式的 Icon(第 4 步添加的图标文件)

      image.png

  7. 将刚才创建并配置好的快捷方式拖入 User’s Desktop 文件夹,即可在程序安装时自动生成桌面快捷方式

    image.png

  8. 重复步骤 5 和 6 再创建一个快捷方式,并将其拖到 User’s Programs Menu 文件夹,即可自动在开始目录中添加快捷方式

  9. 设置需要的 .NET 版本:右键 - 安装项目 - 属性 - Prerequisites,选择项目所需的 .NET 版本

    image.png

  10. 手动添加其它资源文件

例如我在程序目录下有个 Configs 文件夹,里面有很多配置参数表。
只需在 Application Folder 下创建 Configs 文件夹,再右键添加文件,一次把参数表都选上添加进来即可。

注:项目 Resources.resx 里面的图像图标等资源不必手动添加。

进阶技巧

集成 .NET Framework 离线安装包

参考:vs2017 自带发布工具 ClickOnce发布包遇到的问题

下面以集成 .NET Framework 4.6.1 为例。

  1. 依然是 右键 - 安装项目 - 属性 - Prerequisites

    image.png

  2. 勾选 4.6.1, 并选择“从与我的应用程序相同的位置下载系统必备组件”

    image.png

  3. 看一遍官方教程:如果你是集成在线安装包,到这就差不多了

  4. 生成一遍安装项目,看报错说明

    image.png

  5. 按照报错说明中的内容去网上搜索并下载这两个离线安装包

    1. ENU.exe 是真正的 .NET Framework 4.6.1 安装包
    2. CHS.exe 是语言包
  6. 参考官方教程,ENU.exe 复制到 Packages\DotNetFX461 目录下
  7. 由于 CHS.exe 是语言包,所以需将它复制到 Packages\DotNetFX461\zh-Hans 目录下
  8. 再生成一遍安装项目即可

    集成本地化资源

    如果你的程序支持双语包含本地化资源,在打包时你需要在主输出中手动右键添加 项目输出 中的 本地化资源。
    image.png

    升级式安装

    制作打包文件时可以通过设置相关属性实现升级式安装(安装软件的新版本时自动替换掉老版本)。

发布新版本的具体操作:

  1. DetectNewerInstalledVersion )设为 True,使安装时能自动检查新版本
  2. RemovePreviousVersions )设为 True,使安装时能检测老版本并将其卸载
  3. 更新 Version)(版本号),使新的版本号高于老版本号
  4. 维持 UpgradeCode)(升级码)不变,如果升级码被修改将导致 1,2 两项设置失效

image.png

Bug 版本号更新但程序未更新

如果你发现升级式安装后程序并未更新,但控制面板里面的版本号又更新了,那你可能也遇到了 Installer 的一个奇葩 Bug

解决方法是:每次打包新版本前手动更新 AssemblyInfo.cs 里面的项目和文件版本号。

  1. [assembly: AssemblyVersion("2.3.6.0")]
  2. [assembly: AssemblyFileVersion("2.3.6.0")]

注:如果你的解决方案中包含多个项目,且本次更新中你修改了多个项目中的源码,那你也需要手动更新所有相关项目中的 AssemblyInfo.cs。

自定义默认安装路径

下面演示如何将程序默认安装路径修改到 D 盘下面。

  1. 打开安装包制作项目的 File System 视图
  2. 右键 Application Folder,设置其属性

image.png

  1. 此处的 DefaultLocation 就是默认安装路径

image.png

  1. 默认路径为:[ProgramFilesFolder][Manufacturer]\[ProductName]
    1. 根据项目的目标平台,ProgramFilesFolder 会自动对应为 C:\Program Files (x86)\ 或 C:\Program Files\
  2. 如下修改就将默认安装路径修改到了 D 盘

image.png