可以将DLL合并到.NET EXE中吗?

时间:2011-01-08 00:31:55

标签: c# .net clr

我有一个DLL,它存储两个应用程序共有的类。我想将我的应用程序限制在一个EXE文件中,并希望看看我是否能以某种方式将此DLL嵌入到我的主EXE中。

如何将外部DLL嵌入到我的应用程序中? (如果可能的话)

3 个答案:

答案 0 :(得分:15)

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=22914587-b4ad-4eae-87cf-b14ae6a939b0&displaylang=en

ILMerge是一个用于将多个.NET程序集合并到单个.NET程序集中的实用程序。它适用于可执行文件和dll。它有几个控制输出处理和格式的选项,详见附带的文档。

答案 1 :(得分:9)

ILMerge的替代方法是将依赖程序集作为嵌入式资源嵌入到可执行文件中,并利用assembly resolve机制将它们作为资源流加载。可以在此处找到如何执行此操作的示例:

http://blog.magenic.com/blogs/brante/archive/2008/04/14/Embedded-Assembly-Linker.aspx

我自己使用这种模式效果很好。 ILMerge有时会出现问题,因此您的情况可能会有所不同。

答案 2 :(得分:1)

Eazfuscator.NET是一个很棒的工具,它还允许dll合并和嵌入,以及它的正常混淆功能。它还对混淆代码进行了一些简洁的优化。您只需添加一个类注释,而eazfuscator将为您完成所有操作,而不是使用ilmerge。太棒了!

[assembly: System.Reflection.Obfuscation(Feature = "encrypt symbol names with password PAS$", Exclude = false)]
[assembly: System.Reflection.Obfuscation(Feature = "embed nLog.dll", Exclude = false)]
public class MyClass {
  //blah
}