Visual Studio 2008:从具有多个项目的解决方案创建单个DLL

时间:2009-12-10 05:32:05

标签: .net visual-studio-2008 deployment dll assemblies

我有一个在Visual Studio 2008中开发的ASP.NET Web应用程序,由3个不同的项目组成(一个用于UI,一个用于BO,第三个用于DAL)。

如何生成一个包含全部3个的程序集文件?现在它为解决方案中的每个项目生成3个DLLS。

3 个答案:

答案 0 :(得分:17)

为每个项目创建一个netmodule或一个程序集,并将它们编译/合并到一个程序集中。

第一种选择。这是Jay R. Wren提出的:

  

这是一个可爱的黑客,但CSC和VBC都支持 /target:module /addmodule 选项,你实际上可以这样做没有ILMerge只需使用shell脚本或make文件。

     

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

     

将VB项目添加到您的解决方案中。卸载项目并编辑项目文件。

     

将OutputType更改为模块:

<OutputType>module</OutputType>
  

我们不添加对所需项目的引用,而是添加一个模块。可悲的是,VStudio再次失败,但MSBUILD工作得很好。卸载项目并编辑项目文件。使用AddModules include指令添加项目组。

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

这将告诉msbuild告诉CSC使用 /addmodule 指令,就像Studio管理的参考项目组一样。

     

主要缺点:添加模块没有Visual Studio Intellisense。我们已经有了引用,但是我们没有模块太糟糕了。 [更新:如@Ark-kun所指出的那样,Visual Studio可以引用 .netmodule 项目并有Intellisense。只需在更改输出类型之前添加项目引用。]

     

SharpDevelop有第一步,但第二步,“添加模块”gui自SD 2.0以来一直作为低优先级项目开放。

第二种方式。great article(由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#

答案 1 :(得分:7)

我不知道VS2008中是否确实存在此功能。但你肯定可以在VS之外做到。

例如为:
Merging .NET assemblies using ILMerge

答案 2 :(得分:2)