如何将WinUI应用打包为包含所有DLL的EXE安装包或MSIX?
解决WinUI应用打包时NuGet依赖DLL缺失问题及单文件/EXE安装包方案
一、修复MSIX打包中NuGet依赖DLL缺失的问题
- 检查NuGet包的Copy Local属性:右键项目中的NuGet引用→属性,将
Copy Local设置为True。部分NuGet包默认该属性为False,会导致打包时未将DLL复制到输出目录。 - 确认打包项目的包含规则:若使用独立的Windows Application Packaging Project,需确保主项目已被添加为引用,且打包项目的文件节点中,主项目的Release输出目录(如
bin\Release\net6.0-windows10.0.19041.0\win10-x64)未被排除,所有依赖文件会被自动包含。 - 清理缓存后重新打包:执行
Build→Clean Solution清理解决方案,再依次重新生成主项目和打包项目,最后执行发布操作,避免旧缓存导致的打包异常。
二、生成单文件MSIX安装包
MSIX本身是容器化格式,但可生成单个独立MSIX文件(无需额外依赖包):
- 打开打包项目的属性面板,切换到打包选项卡,找到依赖项设置,选择「将所有依赖项包含在包中」(不同VS版本表述可能略有差异)。此设置会将所有NuGet依赖及必要的系统运行时嵌入到MSIX文件内,生成可直接分发的单文件安装包。
- 注意:包含系统运行时会增大MSIX体积,若无需离线安装,也可选择让安装程序自动下载运行时,但单文件打包必须启用依赖包含。
三、生成传统EXE格式安装文件
若偏好传统EXE安装包,可通过以下工具实现:
- WiX Toolset:开源安装包制作工具,创建WiX项目后,配置主项目的所有输出文件(含NuGet DLL),定义安装目录、快捷方式、卸载逻辑等,最终编译生成EXE安装程序。
- Inno Setup:轻量级脚本化安装工具,编写脚本指定应用文件来源(主项目Release输出目录),设置安装路径、快捷方式等参数,编译后生成单EXE安装包。
内容的提问来源于stack exchange,提问作者Rishi Verma
相关产品推荐
相关产品推荐

