我有一個基礎項目,餵養兩個不同的項目。我希望能夠讓主項目在編譯時將所有引用編譯到一個dll中。編譯一個C#項目到一個DLL
這需要構建到項目構建中,以便Jr開發人員不必擔心它。
解決方案:我最後添加一行到項目的後期生成的動作,讓好身材執行以下操作:
$(ProjectDir)ilmerge.exe /out: /ver: <.dll> <.dll>
ilmerge.exe
被轉移到該項目,上述線需要給定的dll並創建一個。
我有一個基礎項目,餵養兩個不同的項目。我希望能夠讓主項目在編譯時將所有引用編譯到一個dll中。編譯一個C#項目到一個DLL
這需要構建到項目構建中,以便Jr開發人員不必擔心它。
解決方案:我最後添加一行到項目的後期生成的動作,讓好身材執行以下操作:
$(ProjectDir)ilmerge.exe /out: /ver: <.dll> <.dll>
ilmerge.exe
被轉移到該項目,上述線需要給定的dll並創建一個。
(這個答案編輯以更新鏈接到新的下載位置,以反映新的見解)
最好的辦法是使用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):此添加爲一個整體步驟,您的構建過程,只是去項目屬性>生成事件>點擊「編輯生成後」,並從上面的命令繼續進行。點擊「宏」以查看如何引用當前文件或程序集。
查看來自Microsoft的外部工具ILMerge:http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx 它可以將多個程序集合併爲一個。
可以使用ILMerge用於合併多個程序集:
ILMerge爲合併多個.NET組件成一個單一的.NET組件的實用程序。它適用於可執行文件和DLL一樣,並配有用於控制輸出的處理和格式的幾個選項。詳細信息請參閱隨附的文檔。
您可以將基礎裝配體合併到一起,並將生成的裝配體用作對其他項目的引用。
或者,您可以將共享代碼放在一個項目中,而不是兩個項目,以便讓單個程序集參考。
好的,那你有什麼問題?你已經標記了ilmerge,這是一個你可以用來做這件事的工具。你有關於這個問題嗎? – FishBasketGordo
http://stackoverflow.com/questions/1829531/how-do-i-merge-multiple-net-assemblies-into-a-single-assembly – Damith
對不起,我知道如何使用該工具與NuGenUnify,但我想當我編譯項目時發生。我可以添加到該過程嗎? – Arnej65