【问题标题】:Visual Studio 2008: Creating Single DLL from Solution with Many ProjectsVisual Studio 2008:从包含多个项目的解决方案创建单个 DLL
【发布时间】:2010-12-25 03:05:24
【问题描述】:

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

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

【问题讨论】:

  • 这样不是违背了拥有 n 层项目的目的吗?
  • 可能是为了便于部署?

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


【解决方案1】:

为您的每个项目创建一个网络模块或一个程序集,然后将它们全部编译/合并到一个程序集中。

第一个替代方案。这是由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 管理的参考项目组一样。

主要缺点:添加的模块没有 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#

【讨论】:

  • 所有三种方式都生成一个程序集。但只有第二种方式给你一个单一的文件
【解决方案2】:
【解决方案3】:

不知道VS2008是否真的有这个功能。但是你当然可以在 VS 之外做到这一点。

例如:
Merging .NET assemblies using ILMerge

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 2011-08-26
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2012-02-26
    • 2019-06-05
    相关资源
    最近更新 更多