我有一个为两个不同项目提供服务的基础项目。我希望能够让主项目在编译时将所有引用编译成一个 dll。
这需要内置到项目构建中,以便 Jr 开发人员不必担心它。
解决方案:我最终在项目的 Post-build 操作中添加了一行,以便一个好的构建执行以下操作:
$(ProjectDir)ilmerge.exe /out: /ver: <.dll> <.dll>
ilmerge.exe
已移至项目,上面的行采用给定的 dll 并创建一个。
我有一个为两个不同项目提供服务的基础项目。我希望能够让主项目在编译时将所有引用编译成一个 dll。
这需要内置到项目构建中,以便 Jr 开发人员不必担心它。
解决方案:我最终在项目的 Post-build 操作中添加了一行,以便一个好的构建执行以下操作:
$(ProjectDir)ilmerge.exe /out: /ver: <.dll> <.dll>
ilmerge.exe
已移至项目,上面的行采用给定的 dll 并创建一个。
(编辑此答案以更新指向新下载位置的链接并反映新见解)
您最好的选择是使用Micorosoft 的 ILMerge。它曾经可以从 Microsoft Research 单独下载(它不是VS 或 .NET SDK 的一部分)。
原始版本一直维护到 2012 年。它现在是一个NuGet 包,这是目前获取它的最佳方式,并将其添加到您的项目和构建服务器。
作为替代方案,您可能想尝试来自 CodePlex 的ILMerge GUI ,它为 ILMerge 提供了 GUI 界面。它的发展被打断了,但现在又活跃起来了。
ILMerge 上的Codeproject 文章详细解释了如何使用它并解释了一些用例。一个示例命令是:
ilmerge /target:winexe /out:AllInOne.exe NormalProgram.exe Lib1.dll Lib2.dll
作为替代方案,您可以将Fody与Costura.Fody一起使用,如此SO 响应中所述。
注意(1):如果您需要合并并行程序集(即混合原生 64 位和 32 位程序集),您应该参考这篇关于动态加载并行程序集的 SO 文章。
注意(2):要将其作为构建过程的一个组成部分添加,只需转到项目属性>构建事件>单击“编辑构建后”并填写上面的命令。单击“宏”以查看如何引用当前文件或程序集。
看看微软的外部工具 ILMerge:http ://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx 它可以将多个程序集合并为一个。
您可以使用ILMerge合并多个程序集:
ILMerge 是一个用于将多个 .NET 程序集合并到一个 .NET 程序集的实用程序。它适用于可执行文件和 DLL,并带有几个用于控制输出处理和格式的选项。有关详细信息,请参阅随附的文档。
您可以将基础程序集合并在一起,并将生成的程序集用作对其他项目的引用。
或者,不是两个项目,而是将您的共享代码放在一个项目中,以便获取单个程序集以供参考。