能否将DLL合并到.NET EXE中?

6

我有一个存储两个应用程序通用类的 DLL。我想保持我的应用程序只有一个 EXE 文件,并想知道是否可以将这个 DLL 嵌入到主要的 EXE 中。

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


1
将标题更改为“DLL注入”是一个重载术语。 - Tim Lloyd
3个回答

15

9

为什么会有人选择使用这种方法而不是ILMerge呢? - Pauli Østerø
1
@Pauli,正如我所提到的,ILMerge在某些情况下存在问题,例如它无法处理某些类型的混淆(我们已经混淆了程序集),它在处理WPF Xaml资源时会出现问题,它在合并多个WPF程序集时也会出现问题,因为Xaml编译器在每个程序集中放置了一个带有相同名称和命名空间的辅助类型,这会导致ILMerge在重复类型上失败。这些只是我个人遇到的问题。 - Tim Lloyd
确实,拥有相同完整名称(命名空间+类型名称)的类型会带来麻烦...我不知道允许将包含具有相同完整名称的类型的多个程序集加载到一个AppDomain中,就像这样?不过这是一个很好的技巧,可以允许将程序集存储在数据库中或从互联网下载。 - Pauli Østerø
@Pauli 是的,这是一个不错的技巧 - 现在请给我投票吧! :) - Tim Lloyd

1

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
}

1
Eazfuscator 的输出在哪里? - Vikneshwar
1
Eazfuscator与Visual Studio集成后,只需在编译器输出的位置进行原地操作。因此,您可以在bin/Release文件夹中找到它。如果您想要进行自定义操作,也可以使用msbuild手动编写脚本。 - scaryman
@scaryman,当你使用“wonderful”时,能否透露是否有关联?(并不是说它有什么不同--缺乏这样的关联会使我对它的评估提高透露也是如此 - Ruben Bartelink
我与eazfuscator无任何关系。而且在他们开始收费之前,我发布了这篇文章。 - scaryman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接