将C#项目编译为一个dll

时间:2011-08-04 13:05:05

标签: .net visual-studio-2010 ilmerge

我有一个基础项目,可以提供两个不同的项目。我希望能够让主项目在编译时将所有引用编译成一个dll。

这需要内置于项目构建中,以便Jr开发人员不必担心它。


解决方案:我最后在项目的Post-build操作中添加了一行,以便良好的构建执行以下操作:

$(ProjectDir)ilmerge.exe /out: /ver: <.dll> <.dll>

ilmerge.exe被移动到项目中,上面的行获取了给出的dll并创建了一个。

3 个答案:

答案 0 :(得分:9)

(编辑此答案是为了更新指向新下载位置的链接并反映新的见解)

最好的办法是使用Micorosoft's ILMerge。它曾经可以从Microsoft Research单独下载(它不是不是 VS或.NET SDK的一部分)。

original version一直维持到2012年。它现在是NuGet package,这是目前最好的方式,并将其添加到您的项目和构建服务器。

作为替代方案,您可能希望从CodePlex尝试ILMerge GUI,它为ILMerge提供GUI界面。它的发展被打断了,但现在再次活跃起来。

Codeproject article on ILMerge详细介绍了如何使用它并解释了一些用例。示例命令是:

ilmerge /target:winexe /out:AllInOne.exe NormalProgram.exe Lib1.dll Lib2.dll

作为替代方案,您可以将FodyCostura.Fody一起使用,如SO response中所述。


注意(1):如果需要合并并排程序集(即混合原生64位和32位程序集),则应咨询this SO article on loading side-by-side assemblies dynamically

注意(2):要将此作为构建过程的一个不可或缺的步骤添加,只需转到项目属性&gt;构建活动&gt;单击“编辑后期构建”并从上面填写命令。单击“宏”以查看如何引用当前文件或程序集。

答案 1 :(得分:1)

查看Microsoft的外部工具ILMerge:http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx 它可以将多个程序集合并为一个。

答案 2 :(得分:0)

您可以使用ILMerge合并多个程序集:

  

ILMerge是一个用于将多个.NET程序集合并到单个.NET程序集中的实用程序。它适用于可执行文件和DLL,并带有几个选项来控制输出的处理和格式。有关详细信息,请参阅随附的文档。

您可以将基础程序集合并在一起,并将结果程序集用作对其他项目的引用。

或者,将您的共享代码放在一个项目中,而不是两个项目,以便引用一个程序集。