在开发WPF程序时,有时我们需要把整个软件打包成一个文件,这样可以方便分发,本文将会介绍怎么把WPF打包成单文件形式。
.Net/.Net Core
在最新的 .Net 项目中,已经提供了单文件打包支持,只需要在项目发布时勾选即可。

需要注意一点,新的 .Net 项目可以将整个运行时进行打包,分发的时候客户机不需要安装运行时也能运行,但是对于 WPF 程序来说,采取包含运行时发布之后打包的单文件其实并不是只有一个文件,其中还包括了 WPF 运行时一些依赖。只有框架依赖模型打包的才是单个文件。
.Net Framework
在 .Net Framework 的 WPF 项目中,并没有内置官方的单文件打包支持,我们需要使用额外的工具来完成
Costura
Costura 是 Fody 的一个插件,Fody 是一个专门处理 .Net 程序集的扩展工具,它允许将程序集的 IL 作为构建的一部分进行操作,Fody 通过扩展插件封装 MSBuild 和 Visual Studio API 功能,而 Costura 的功能就是将依赖项嵌入成资源,从而实现最终编译结果只剩下一个程序集文件。
安装
我们可以从 Nuget 上获取到 Costura 。通过vs的包管理器界面即可安装

也可以通过程序包管理控制台安装,注意:需要同时安装最新的 Fody
PM> Install-Package Fody
PM> Install-Package Costura.Fody
使用
我们只需要在 Fody 的配置文件中添加对应的配置项即可,配置文件为:FodyWeavers.xml,如果没有新建一个即可
<Weavers>
<Costura />
</Weavers>
这时候我们在生成项目,就可以得到一个单文件软件,所有的动态库都被嵌入到程序集中了。