2009-12-10 113 views
9

我有一個在Visual Studio 2008中開發的ASP.NET Web應用程序,由3個不同的項目(一個用於UI,BO之一和DAL的第三個)組成。Visual Studio 2008:從許多項目的解決方案創建單個DLL

如何生成一個包含所有3的單個程序集文件?現在它爲解決方案中的每個項目生成3個DLLS。

+0

難道那種打敗n層項目的目的? – slugster 2009-12-10 05:42:22

+2

可能是爲了便於部署? – 2009-12-10 08:38:24

+1

也分配。 – 2009-12-11 07:06:51

回答

17

爲每個項目的創建netmodule或組裝和編譯/他們都合併到一個單一的組件。

第一種選擇。這是提出Jay R. Wren

這是一個可愛的黑客,但與CSC和VBC都支持/target:module/addmodule選項,你實際上可以只用一個shell腳本做這沒有ILMerge或製作文件。

Visual Studio不支持「netmodule」類型,但MSBuild可以。

將VB項目添加到您的解決方案。卸載項目並編輯項目文件。

更改輸出類型以模塊:

<OutputType>module</OutputType> 

添加到所需項目的引用相反的,我們添加一個模塊。可悲的是,再次VStudio在這裏失敗,但MSBUILD工作得很好。卸載項目並編輯項目文件。使用AddModules include指令添加項目組。

<ItemGroup><AddModules Include="..\VbXml\bin\Debug\VbXml.netmodule" /></ItemGroup> 

這將告訴的MSBuild告訴CSC使用/addmodule指令,就像參考項目組該工作室做管理。

重大缺點:沒有添加模塊的Visual Studio Intellisense。我們已經有引用,這太糟糕了,我們沒有模塊。 [更新:由於@Ark-kun指出的其他地方,Visual Studio可以參考.netmodule項目,並有智能感知。只需添加項目參考,然後再改變輸出類型。]

SharpDevelop有第一步,但第二步,「添加模塊」gui已經作爲SD 2.0以後的低優先級項目開放。

第二種方式。這個great article(Scott Hanselman作者)描述瞭如何使用Visual Studio自動運行megre程序集。它確實給你智能感知支持 ,不像第一個替代

第三種方式。用scs手動執行。
示例如何創建幾個模塊和鏈接主題到單個DLL:

csc /t:module RarelyUsedTypes.cs 
csc /out:AllTypes.dll /t:library /addmodule:RarelyUsedTypes.netmodule AllTypes.cs 

欲瞭解更多信息,請參閱裏希特的書CLR via C#

+1

所有三種方式產生一個組件。但只有第二種方式給你一個**文件**。 – 2010-03-18 17:15:10

相關問題