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

Shy*_*yju 9 .net deployment dll assemblies visual-studio-2008

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

如何生成一个包含所有3个的汇编文件?现在它为解决方案中的每个项目生成3个DLLS.

Rom*_*iko 17

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

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

这是一个可爱的hack,但是CSC和VBC都支持/target:module/addmodule选项,你实际上可以通过使用shell脚本或make文件在没有ILMerge的情况下执行此操作.

Visual Studio不支持"netmodule"类型,但MSBuild支持.

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

将OutputType更改为模块:

<OutputType>module</OutputType>
Run Code Online (Sandbox Code Playgroud)

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

<ItemGroup><AddModules Include="..\VbXml\bin\Debug\VbXml.netmodule" /></ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

主要缺点:添加模块没有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
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅Richter的书籍CLR via C#.


o.k*_*k.w 7

我不知道VS2008中是否确实有这个功能.但你肯定可以在VS之外做到.

例如:
使用ILMerge合并.NET程序集