2011-08-04 44 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一樣,並配有用於控制輸出的處理和格式的幾個選項。詳細信息請參閱隨附的文檔。

您可以將基礎裝配體合併到一起,並將生成的裝配體用作對其他項目的引用。

或者,您可以將共享代碼放在一個項目中,而不是兩個項目,以便讓單個程序集參考。