2011-08-04 45 views
6

我有一个基础项目,喂养两个不同的项目。我希望能够让主项目在编译时将所有引用编译到一个dll中。编译一个C#项目到一个DLL

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


解决方案:我最后添加一行到项目的后期生成的动作,让好身材执行以下操作:

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

ilmerge.exe被转移到该项目,上述线需要给定的dll并创建一个。

+2

好的,那你有什么问题?你已经标记了ilmerge,这是一个你可以用来做这件事的工具。你有关于这个问题吗? – FishBasketGordo

+0

http://stackoverflow.com/questions/1829531/how-do-i-merge-multiple-net-assemblies-into-a-single-assembly – Damith

+0

对不起,我知道如何使用该工具与NuGenUnify,但我想当我编译项目时发生。我可以添加到该过程吗? – Arnej65

回答

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):此添加为一个整体步骤,您的构建过程,只是去项目属性>生成事件>点击“编辑生成后”,并从上面的命令继续进行。点击“宏”以查看如何引用当前文件或程序集。

0

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

ILMerge为合并多个.NET组件成一个单一的.NET组件的实用程序。它适用于可执行文件和DLL一样,并配有用于控制输出的处理和格式的几个选项。详细信息请参阅随附的文档。

您可以将基础装配体合并到一起,并将生成的装配体用作对其他项目的引用。

或者,您可以将共享代码放在一个项目中,而不是两个项目,以便让单个程序集参考。