三种方法,让WPF项目生成单文件
【三种方法,让WPF项目生成单文件】在使用WPF写一些小工具时,往往需要将多个DLL文件嵌入到EXE文件里,生成单文件。这里介绍三种方案:
- 把DLL文件作为嵌入资源
- 使用Costura.Fody
- 使用.NET Reactor。
Resources
文件夹,把需要的dll文件拷贝到该目录中(可以是多个dll文件),然后修改每个文件的属性,将生成操作改为嵌入的资源,例如:文章图片
拷贝dll文件
文章图片
修改生成操作
第二步,修改
App.xaml.cs
文件,添加程序集解析失败事件,并加载指定的嵌入资源。修改后内容为:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows;
namespace Embed
{
///
/// App.xaml 的交互逻辑
///
public partial class App : Application
{
readonly string[] dlls = new string[] { "Newtonsoft.Json" };
// 去掉后缀名
public App()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}private System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string resources = null;
foreach (var item in dlls)
{
if (args.Name.StartsWith(item))
{
resources = item + ".dll";
break;
}
}
if (string.IsNullOrEmpty(resources)) return null;
var assembly = Assembly.GetExecutingAssembly();
resources = assembly.GetManifestResourceNames().FirstOrDefault(s => s.EndsWith(resources));
if (string.IsNullOrEmpty(resources)) return null;
using (Stream stream = assembly.GetManifestResourceStream(resources))
{
if (stream == null) return null;
var block = new byte[stream.Length];
stream.Read(block, 0, block.Length);
return Assembly.Load(block);
}
}
}
}
其中
dlls
数组内容为Resources
目录下去掉后缀的文件名。比如Resources
目录下有Newtonsoft.Json.dll
、MaterialDesignThemes.Wpf.dll
和MaterialDesignColors.dll
,则dlls
数组内容为readonly string[] dlls = new string[] { "Newtonsoft.Json" , "MaterialDesignThemes.Wpf" , "MaterialDesignColors"};
最后重新生成项目,删除生成目录下的dll文件即可。
二、使用Costura.Fody Costura.Fody可以把引用的库文件嵌入为资源,使用起来非常简单,直接安装Costura.Fody即可:
PM> Install-Package Costura.Fody
举一个简单例子:
- 新建一个WPF项目,添加Newtonsoft.Json:
PM> Install-Package Newtonsoft.Json
- 安装Costura.Fody
- 生成项目
文章图片
Costura.Fody生成结果 Costura.Fody链接: https://github.com/Fody/Costura
三、使用 .NET Reactor .NET Reactor是一款.NET代码加密混淆工具,同时具有扫描依赖,并嵌入程序集的功能。
具体使用步骤:
- 打开WPF项目生成的exe文件
- 点击扫描依赖项按钮;
- 勾选嵌入所有程序集;
- 点击保护即可。
文章图片
使用流程 生成结果如下:
文章图片
生成结果
版权声明:本文为「txfly」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://www.jianshu.com/p/72534a7e2f4a
推荐阅读
- 诗歌:|诗歌: 《让我们举起世界杯,干了!》
- 对抗抑郁最好的方法
- 微习惯复盘
- 怎样用黑谜速冻膜去黑头,|怎样用黑谜速冻膜去黑头, 最有效的去黑头的方法看这!
- 移动端h5调试方法
- 研学让生活更美好
- 唱歌教学(导致嗓音损坏的几个常见的错误唱歌方法!)
- 拆书方法训练营
- 数组常用方法一
- 让爱永驻心中