在一个解决方案中涉及多个项目的.net应用程序中,我有一个项目,其命名空间设置为Company.Product.UI,另一个项目使用Company.Product.UI.WebPages。我的问题是构建这两个项目会导致两个dll。我怎样才能拥有一个dll并仍保留当前的解决方案结构。我使用Visual Studio 2008和C#。
答案 0 :(得分:11)
您必须将两个项目合并为一个项目,或使用ILMerge之类的工具将生成的程序集合并为一个程序集。
ILMerge是一个可以使用的实用程序 将多个.NET程序集合并到 一个组件。这是自由的 可从工具和工具中使用 Microsoft .NET上的“实用工具”页面 Framework Developer Center。
如果你想将ILMerge自动化为MSBuild任务,那么我建议你看看ilmerge-tasks:
有兴趣在使用过程中使用ILMerge 自动构建? ILMerge任务 包含两个可构建的项目 将允许您作为一个访问ILMerge 来自MSBuild和NAnt的任务。它 甚至包括一个后期构建事件 合并ILMerge和任务dll 您可以在没有的情况下使用该任务 ILMerge.exe存在。
答案 1 :(得分:1)
我猜你可以创建一个包含两个项目中所有文件的新项目文件。这样,您可以保留当前的开发结构,并使用合并的项目文件来构建要从项目中释放的输出。项目文件是相当简单的xml文件,所以如果你在文本编辑器中打开其中一个,你可能会很快发现它们是如何工作的。
这种方法的明显缺点当然是你需要在其中一个项目中添加或删除文件时维护第三个项目文件,但如果这种情况不常发生,那么它可能会很好地工作,我想。
答案 2 :(得分:0)
有简单的方法可以做到这一点,但它可能不是最好的方法。使用您想要的dll名称创建一个新解决方案。在此项目中创建文件夹结构,该结构与两个项目的名称相同。然后在特定文件夹上,执行“添加现有项目”。在该名称的项目中添加cs文件。添加文件时,在“添加”按钮上选择“添加为链接”(有一个下拉列表,您可以在添加按钮旁边选择)。继续这样做并构建。你将拥有dll。
例如。如果您有一个名为A的项目和一个名为B的项目,并且您希望将它们合并到一个名为C的dll中。创建一个名为C的新项目。在此项目中添加一个名为A的文件夹和另一个名为B的文件夹。现在说项目A有一个cs文件X.cs和B有一个名为Y.cs.在名为A的文件夹上,右键单击并执行“添加现有项”。转到项目A并选择X.cs.在“添加”按钮旁边,您会看到一个向下箭头。单击它并选择添加为链接。对B做同样的事情。构建这个项目,你就可以在bin文件夹中找到你了。