【发布时间】:2011-06-05 14:50:00
【问题描述】:
我有一个 DLL,用于存储两个应用程序共有的类。我想将我的应用程序限制在一个 EXE 文件中,并想看看我是否可以以某种方式将此 DLL 嵌入到我的主 EXE 中。
如何将外部 DLL 嵌入到我的应用程序中? (如果可能的话)
【问题讨论】:
-
更改了标题,因为 DLL 注入是一个重载术语。
我有一个 DLL,用于存储两个应用程序共有的类。我想将我的应用程序限制在一个 EXE 文件中,并想看看我是否可以以某种方式将此 DLL 嵌入到我的主 EXE 中。
如何将外部 DLL 嵌入到我的应用程序中? (如果可能的话)
【问题讨论】:
ILMerge 是一个用于将多个 .NET 程序集合并到一个 .NET 程序集的实用程序。它适用于可执行文件和 dll。它带有几个用于控制输出处理和格式的选项,有关详细信息,请参阅随附的文档。
【讨论】:
ILMerge 的替代方法是将依赖程序集作为嵌入式资源嵌入到可执行文件中,并利用assembly resolve 机制将它们作为资源流加载。可以在此处找到如何执行此操作的示例:
http://blog.magenic.com/blogs/brante/archive/2008/04/14/Embedded-Assembly-Linker.aspx
我自己使用这种模式,效果很好。 ILMerge 有时会出现问题,因此您的里程数可能会有所不同。
【讨论】:
Eazfuscator.NET 是一个很棒的工具,它还允许 dll 合并和嵌入,以及它的正常混淆功能。它还对混淆代码进行了一些巧妙的优化。您只需添加一个类注释,而不是弄乱 ilmerge,eazfuscator 将为您做所有事情。太棒了!
[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
}
【讨论】: