如何将外部dll打包到单个文件可执行文件

时间:2016-05-19 19:29:51

标签: c# dll import

我想使用c#和Visual Studio 15将2个Gmap dll导入到我的项目中。 但是,如果我在其他计算机上运行exe或在桌面上运行,则会发生错误(exe不会像在VS环境中那样执行)。

有没有办法添加像内置库这样的dll所以我可以使用exe而无需携带dll?

exe必须在不同的笔记本电脑上运行,无需访问管理员帐户,也无需在机器上的Net环境中进行更改。它必须在人想要在他的计算机上执行应用程序时运行。

1 个答案:

答案 0 :(得分:0)

我想到了两个选项:

选项1:从dll中提取模块和所有资源,并使用Assembly Linker tool (al.exe)将它们重新绑定到新的程序集。似乎还存在一种使用这种方法的工具 - ILMerge

选项2:将这些额外的dll(和其他文件)作为嵌入文件添加到主机应用程序并动态加载它们。杰弗里里希特有an example for this

我建议你抓住杰弗里里希特的精彩书籍#34; CLR来自C#"这解释了.Net程序集是什么以及如何使用它。

编辑:杰弗里里希特的帖子也包含了关于这些选项之间差异的一个很好的论点:

  

ILMerge从一组现有程序集生成新的程序集文件。这意味着原始程序集将丢失其标识(名称,版本,区域性和公钥)。

     

我在这里展示的是创建一个将EXISTING程序集嵌入其中的程序集,这样它们就不会失去它们的身份。

     

由于原始程序集保持其身份,因此更多方案可正常工作,例如序列化和序列化。安全