Dot-Net

Visual Studio 2008:從包含多個項目的解決方案創建單個 DLL

  • June 9, 2019

我有一個在 Visual Studio 2008 中開發的 ASP.NET Web 應用程序,由 3 個不同的項目組成(一個用於 UI,一個用於BO,第三個用於DAL)。

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

不知道VS2008是否真的有這個功能。但是你當然可以在 VS 之外做到這一點。

例如:

使用 ILMerge 合併 .NET 程序集

為您的每個項目創建一個網路模組或一個程序集,並將它們全部編譯/合併到一個程序集中。

**第一種選擇。**這是由Jay R. Wren提出的:

這是一個可愛的 hack,但是由於 CSC 和 VBC 都支持**/target:module/addmodule**選項,您實際上可以在沒有 ILMerge 的情況下執行此操作,只需使用 shell 腳本或 make 文件。

Visual Studio 不支持“netmodule”類型,但 MSBuild 支持。

將 VB 項目添加到您的解決方案中。解除安裝項目並編輯項目文件。

將 OutputType 更改為模組:

<OutputType>module</OutputType>

我們沒有添加對所需項目的引用,而是添加了一個模組。可悲的是,VStudio 在這裡再次失敗,但 MSBUILD 工作得很好。解除安裝項目並編輯項目文件。使用 AddModules 包含指令添加項目組。

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

這將告訴 msbuild 告訴 CSC 使用**/addmodule**指令,就像 Studio 管理的 Reference Item Group 一樣。

主要缺點:添加的模組沒有 Visual Studio Intellisense。我們已經有了參考資料,可惜我們沒有模組。[更新:正如@Ark-kun在別處指出的那樣,Visual Studio 可以引用**.netmodule**項目並擁有 Intellisense。只需在更改輸出類型之前添加項目引用。]

SharpDevelop 有第一步,但第二步,“添加模組”gui 自 SD 2.0 以來已作為低優先級項目打開。

第二種方式。這篇很棒的文章(由 Scott Hanselman 撰寫)描述瞭如何在使用 Visual Studio 時自動執行程序集。它確實為您提供 IntelliSense 支持,這與第一個替代方案不同。

**第三種方式。**使用 scs 手動完成。

範例如何創建多個模組並將主題連結到單個 dll:

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

有關更多資訊,請參閱 Richter 的書CLR via C#

引用自:https://stackoverflow.com/questions/1878807