我有一个在Visual Studio 2008中开发的ASP.NET Web应用程序,由3个不同的项目组成(一个用于UI,一个用于BO,第三个用于DAL)。
如何生成一个包含全部3个的程序集文件?现在它为解决方案中的每个项目生成3个DLLS。
答案 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之外做到。
答案 2 :(得分:2)