我一直在寻找如何将dll合并到项目输出exe。
我安装了 Vitevic Assembly Embedder ,但是在构建项目时,它仍会保留一些dll文件。
由于我听说 ILMerge ,但我找不到任何有用的支持。 我需要一个可以合并所有dll的工具。
答案 0 :(得分:0)
这就是我通常做的事情:
将此代码放在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;
}