在生成时将所有相关程序集合并到Exe
本文关键字:程序集 合并 Exe | 更新日期: 2023-09-27 18:17:22
我一直在寻找从很长一段时间关于如何合并dll项目输出exe。
我安装了Vitevic Assembly Embedder,但是当项目被构建时,它仍然留下一些dll文件。
因为我听说ILMerge,但我找不到任何有用的支持。我需要一个可以合并所有dll的工具
我通常是这样做的:
- 将所有dll存储在解决方案中的某个文件夹中(如"libs")。
- Inside VS将所有dll的"Build Action"更改为"Embedded Resource"-这将在exe中"存储"实际文件。
-
将此代码放在Main方法中,或者在使用任何外部程序集之前的任何地方:
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
:
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
var thisAssembly = Assembly.GetExecutingAssembly();
var assemblyName = new AssemblyName(args.Name);
var dllName = assemblyName.Name + ".dll";
var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(dllName));
if (resources.Any())
{
var resourceName = resources.First();
using (var stream = thisAssembly.GetManifestResourceStream(resourceName))
{
if (stream == null) return null;
var block = new byte[stream.Length];
try
{
stream.Read(block, 0, block.Length);
return Assembly.Load(block);
}
catch (IOException)
{
return null;
}
catch (BadImageFormatException)
{
return null;
}
}
}
return null;
}