VS2017项目打包安装教程
本文从项目创建完成之后,手把手对项目打包及安装进行细致教学分享。
一.准备工作
1.安装Installer(若已经安装,则直接进行下一步)
-
工具-扩展和更新
-
选择联机-Visual Studio Marketplace,搜索Microsoft Visual Studio Installer Projects ,点击下载
-
这样下载更新速度极慢,且大概率下失败。网络上有很多方法,例如修改host,ipv6等,效果不大。
我选择点击上图右侧“详细信息”链接,进入网页下载。依旧出现网络错误。
最终下载迅雷软件,将刚刚“详细信息”的网页地址复制到迅雷,体验一秒下载完毕。(迅雷打钱)
当然其他下载软件也可以。 -
下载获得InstallerProjects.vsix,双击进行安装,重新启动VS,打开要打包的工程项目。
二.打包可执行程序
1.创建setup打包项目
- 右击项目解决方案-添加-新建项目
- 选择已安装-其他项目类型-Visual Studio Installer-Setup Project
三个文件夹分别指向要发送到[文件安装目录下/桌面/开始菜单]中的文件。
Application Folder:用来存放程序项目的可执行文件、资源(图片、音频、视频等)、各种依赖dll文件。
User’s Desktop:用来生成桌面快捷方式
User’s Programs Menu:用来生成开始菜单快捷方式
2.编辑Application Folder
- 击Application Fold-Add-项目输出
- 选择要打包的项目-主输出-确认
- 可能会出现下列错误,我没有深究,根据错误提示,我重启了VS,以防万一,移除setup1,并将.vs空间内的setup1文件夹删除。重新创建setup打包项目,即步骤1、2,未报错误。
- 右击Application Fold-Add-Folder,创建文件夹用以保存项目需要的图片等资源。
我创建image文件夹保存桌面快捷方式和开始菜单快捷方式的图标。
- 右击image-Add-文件,选择所需要的资源文件,我选择了icon图标。
3.编辑User’s Desktop
- 选择上一步骤产生的主输出文件-右击生成快捷方式,并重新命名。我命名为wapi。
- 选中wapi,在属性窗口内点击icon-Browse-选择上一步骤中image内部icon资源。
- 左键按住wapi,将快捷方式拖入User’s Desktop。
4.编辑User’s Programs Menu
- 创建开始菜单文件夹。
- 重复步骤2,将wapi快捷方式放入WAPI文件夹内。
5.安装包提供卸载功能
- Application Folder右键添加文件"C:\Windows\System32\msiexec.exe"。
注:大多数人的msiexec.exe不享有权限,在最后生成过程会报警,可提前将msiexec.exe复制到桌面,再进行添加操作。
- 选中msiexec.exe文件右键创建快捷方式,命名为uninstall
- 选中uninstall快捷方式,Arguments属性设置为"/x ProductCode",其中ProductCode的值取自setup project属性中的ProductCode的值。
- 将uninstall拖动到User’s Programs Menu下
6.设置完毕,执行build生成解决方案
- Debug内生成的两个文件都有安装和卸载功能,可以去尝试一下,且安装之后,控制面板的卸载程序和开始菜单里都有程序卸载功能,就不一一展示了。
三.打包.net框架
1.设置系统必备
- 右击setup-属性
- 进入setup属性页选择Build-Prerequisites…
- 选择项目需要的.net版本,勾选“从与我的应用程序相同的位置下载系统必备组件”
- 所需要的.net版本从项目-属性-应用程序-目标框架,进行查看
2.下载安装框架
首先进入C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\DotNetFX461
最后的数字是.net版本号4.6.1,选择自己需要的。
- 下载NDP461-KB3102436-x86-x64-AllOS-ENU.exe
进入网页在搜索栏中搜索“Windows .NET Framework (所需要的版本号) 脱机安装程序”,选择正确的链接,下载离线安装程序包NDP461-KB3102436-x86-x64-AllOS-ENU.exe
.net 4.6.1
-
将NDP461-KB3102436-x86-x64-AllOS-ENU.exe复制到C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\DotNetFX461文件夹下
-
下载NDP461-KB3102436-x86-x64-AllOS-CHS.exe
进入C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\DotNetFX461\zh-Hans,用记事本模式打开Package.xml
查找带有fwlink的网址,不止一个的选择FullLanguagePackBootstrapper所在行的网址,复制到网页搜索栏,可以下载得到NDP461-KB3102436-x86-x64-AllOS-CHS.exe
- 将NDP461-KB3102436-x86-x64-AllOS-CHS.exe复制到C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\DotNetFX461\zh-Hans文件夹下
3.设置完毕,执行build生成解决方案
- Debug内生成的3个文件,多出了一个DotNetFX461文件夹保存.net框架安装包。
四.注意
生成过程中,左下角输出可能出现warning:“Microsoft .NET Framework 4.6.1 (x86 和 x64)”中“PublicKey”特性的值与文件“C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\DotNetFX461\NDP461-KB3102436-x86-x64-AllOS-ENU.ex”的该特性值不匹配。
解决方法如下:
- 定位到错误提示的文件,一般来说就是上面下载安装的两个安装包
- 以NDP461-KB3102436-x86-x64-AllOS-ENU.exe为例,右键→属性→数字签名
- 在“签名列表”中任意选择签名,然后点“详细信息”
- 在窗口中点“查看证书”,在弹出窗口中选择“详细信息”卡片,在下面的列表中选中“公钥”
- 把公钥对应的编码拷贝到记事本,将其中的空格替换掉,可以选择编辑-替换-将空格替换为空-全部替换
- 打开同以目录下 product.xml 文件,查找 NDP461-KB3102436-x86-x64-AllOS-ENU.exe,将其对应的 publicKey 替换成刚才处理好的字符串就 OK 了。
- 同理,在C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\DotNetFX461\zh-Hans下的NDP461-KB3102436-x86-x64-AllOS-CHS.exe和product.xml 进行相同操作。
- 重新生成解决方案
结语
一个完整的Visual Studio 2017项目进行打包并附加.net框架打包详细过程到此结束。如果在操作过程中出现问题,欢迎讨论。