多个项目生成单一程序集

8
在一个包含多个项目的解决方案中,我有一个命名空间设置为Company.Product.UI的项目和另一个命名空间设置为Company.Product.UI.WebPages的项目。我的问题是构建这两个项目会得到两个dll文件。如何才能只生成一个dll文件并保留当前的解决方案结构?我使用的是Visual Studio 2008和C#。

1
请参阅 https://dev59.com/y0rSa4cB1Zd3GeqPY7-a。 - CAD bloke
3个回答

14
你需要将这两个项目合并成一个项目,或者使用类似 ILMerge 的工具将生成的程序集合并为单个程序集。

ILMerge 是一个实用工具,可用于将多个 .NET 程序集合并为一个程序集。它可以从 Microsoft .NET Framework Developer Center 的 Tools & Utilities 页面免费使用。

如果你想将 ILMerge 自动化为 MSBuild 任务,则建议你查看 ilmerge-tasks

想在自动化构建期间使用 ILMerge 吗?ILMerge Tasks 包含了两个可构建的项目,允许您从 MSBuild 和 NAnt 中作为任务访问 ILMerge。它甚至包括一个后构建事件,可以将 ILMerge 和任务 dll 合并,以便您可以在没有 ILMerge.exe 的情况下使用该任务。


1
我能否将ILMerge集成到Visual Studio的构建过程中,以便自动化任务? - kjv
@kjv 这就是 ilmerge 任务的含义。 - Ruben Bartelink

1
有一个简单的方法可以做到这一点,但可能不是最好的方法。创建一个新解决方案,名称为所需dll的名称。在此项目中创建与两个项目名称相同的文件夹结构。然后在特定文件夹上执行“添加现有项”。将该名称项目中的cs文件添加到其中。在添加文件时,在添加按钮上选择“添加为链接”(在添加按钮旁边有一个下拉菜单)。继续这样做并构建。你将拥有dll。
例如,如果您有一个名为A的项目和一个名为B的项目,并且您想将它们合并成一个名为C的dll。创建一个名为C的新项目。在该项目中添加一个名为A的文件夹和另一个名为B的文件夹。现在假设项目A有一个名为X.cs的cs文件,而B有一个名为Y.cs的文件。在名为A的文件夹上右键单击,然后执行“添加现有项”。转到项目A并选择X.cs。在添加按钮旁边,您将看到一个向下箭头。点击它并选择“添加为链接”。对于B,也要这样做。构建此项目,您将在bin文件夹中获得dll。

1

我想你可以创建一个新的项目文件,其中包含来自两个项目的所有文件。这样,您可以保留当前的开发结构,并使用合并的项目文件从项目中构建输出以发布。项目文件是相当简单的xml文件,因此如果您在文本编辑器中打开其中一个文件,您很快就会弄清它们的工作方式。

显然,这种方法的缺点是当一个项目中添加或删除文件时,您需要维护这个第三个项目文件,但如果这不经常发生,那么这种方法可能非常有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接