我有一个支持两个不同项目的基础项目。我希望能够让主项目在编译时将所有引用编译为一个 dll。
这需要是项目构建中内置的东西,以便 Jr 开发人员不必担心它。
解决方案:我最终在项目的 Post-build 操作中添加了一行,以便一个好的构建执行以下操作:
$(ProjectDir)ilmerge.exe /out: /ver: <.dll> <.dll>
ilmerge.exe
已移至项目,上面的行采用给定的 dll 并创建一个。
最佳答案
(编辑此答案以更新指向新下载位置的链接并反射(reflect)新见解)
最好的办法是使用 Micorosoft's ILMerge .它曾经可以从 Microsoft Research 单独下载(它不是 VS 或 .NET SDK 的一部分)。
original version一直维持到 2012 年。现在是 NuGet package ,这是目前获取它并将其添加到您的项目和构建服务器的最佳方式。
作为替代方案,您可能想尝试 ILMerge GUI来自 CodePlex,它为 ILMerge 提供了一个 GUI 界面。它的发展被中断,但现在又活跃起来。
Codeproject article on ILMerge解释了有关如何使用它的更多信息并解释了一些用例。一个示例命令是:
ilmerge /target:winexe /out:AllInOne.exe NormalProgram.exe Lib1.dll Lib2.dll
作为替代方案,您可以使用 Fody与 Costura.Fody ,如本 SO response 中所述.
注意 (1):如果您需要合并并行程序集(即混合原生 64 位和 32 位程序集),您应该咨询 this SO article on loading side-by-side assemblies dynamically .
注意 (2):要将其作为构建过程的一个完整步骤,只需转到“项目属性”>“构建事件”> 单击“编辑后构建”并填写上面的命令。单击“宏”以查看如何引用当前文件或程序集。
关于.net - 将一个 C# 项目编译成一个 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6941932/