2012-08-24 37 views
0

我有多個解決方案,每個都有多個項目。如何使用MSBuild在單個應用程序套件包中組合多個.NET可執行文件?

我想要做的就是將這些項目的一個子集從可能不同的解決方案中組合到一個「包」中,然後像這樣部署它。

我可以編輯每個項目並更改它的輸出文件夾,但這會產生反作用,特別是這些項目中的一些是不同目標包之間的共享依賴項。這會造成一個繁瑣的混亂,而且很容易出錯。

理想情況下,我還希望有一些自由,以便如何在最終包中組裝這些應用程序,或許此應用程序位於包的根文件夾中,但也許這個其他可執行文件將放在最終包的子文件夾中。

最後,我與之合作的團隊不熟悉MSBuild,因此最終的解決方案應該可以在VisualStudio中使用。

我正在考慮創建一個任務來掃描項目依賴關係,並簡單地將每個輸出文件夾的內容複製到專用項目(將包含任務)的輸出文件夾中。如有必要,最終目的地可以通過屬性文件進行微調。

有沒有更好的方法?


通過Package我只是意味着包含了所有的文物可能他們是可執行文件,DLL,資源,配置文件等。我仍然希望他們繼續爲獨立然而實體的文件夾。

+0

我不是100%確定的,但我認爲Visual Studio可以通過安裝項目來開箱即用。我敢肯定,您可以創建一個包含所有子解決方案的主解決方案,而不會丟失這些子解決方案,然後在主解決方案中創建一個MSBuild項目。 – David

+0

事實上,聽起來您的解決方案並不是根據您的「產品」或您嘗試部署的東西來組織的。是否有機會以這樣的方式組織這些文件:一些是您導入的庫,另一些是可執行文件,然後它只是一個安裝程序問題? – Alex

回答

0

我結束了創建中,我複製一個項目的構建輸出新的輸出文件夾。然後,依賴於第一個項目的其他項目將在處理其自己的額外輸出文件夾之前抽取內容並與它們合併,以便在依賴關係樹中重複該過程。

這確保了所有的人工製品都貫穿到最終應用程序的構建中,而不僅僅是DLL。

我當時需要將整個事件打包到一次點擊歸檔中。

它在構建系統上也起作用,因爲額外的文件夾被壓縮爲下游項目可以使用和合並的一種工件。雖然不是很乾淨,但足以滿足我的需求。事後看來,我可能會利用nuget以更清潔和可維護的方式達到相同的結果。

0

我假設你試圖獲得一個沒有外部DLL的可執行文件。要做到這一點,使用exe的後期編譯事件調用ILMerge將exe和dll合併成一個exe文件。

http://www.microsoft.com/en-us/download/details.aspx?id=17630

+0

Nop,只是一個包含所有東西的文件夾,或許我應該在問題中更清楚一些,因此我已經對它進行了編輯。 – Newtopian

+0

@Newtopian,exe文件中的'bin \ Release'或'bin \ Debug'文件夾將包含所有的東西。 –

+0

是的,不,聯邦項目將所有的exe和dll都好,但它不一定會從每個依賴項的輸出文件夾中獲得所有東西。對於不是構建的工件的傳遞依賴性往往不能正確地遵循。 – Newtopian

相關問題