Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 来自多个项目的单个程序集_.net_Assemblies - Fatal编程技术网

.net 来自多个项目的单个程序集

.net 来自多个项目的单个程序集,.net,assemblies,.net,Assemblies,在一个解决方案中涉及多个项目的.net应用程序中,我有一个名称空间设置为Company.Product.UI的项目,另一个名称空间设置为Company.Product.UI.WebPages。我的问题是,构建这两个项目会产生两个DLL。如何在拥有单个dll的同时仍保留当前的解决方案结构。我使用Visual Studio 2008和C#。您必须将两个项目合并到一个项目中,或者使用类似的工具将生成的程序集合并到单个程序集中 ILMerge是一个可以使用的实用程序 将多个.NET程序集合并到 单个组件

在一个解决方案中涉及多个项目的.net应用程序中,我有一个名称空间设置为Company.Product.UI的项目,另一个名称空间设置为Company.Product.UI.WebPages。我的问题是,构建这两个项目会产生两个DLL。如何在拥有单个dll的同时仍保留当前的解决方案结构。我使用Visual Studio 2008和C#。

您必须将两个项目合并到一个项目中,或者使用类似的工具将生成的程序集合并到单个程序集中

ILMerge是一个可以使用的实用程序 将多个.NET程序集合并到 单个组件。它是免费的 可从工具中使用& Microsoft.NET上的实用程序页 框架开发者中心

如果要将ILMerge作为MSBuild任务进行自动化,我建议您查看:

有兴趣在 自动构建?ILMerge任务 包含两个可构建的项目 将允许您以用户身份访问ILMerge 来自MSBuild和NAnt的任务。信息技术 甚至包括一个生成后事件 合并ILMerge和任务dll,以便 您可以使用任务而无需 存在ILMerge.exe


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


这种方法的明显缺点当然是,当在其中一个项目中添加或删除文件时,您需要维护第三个项目文件,但如果这不是经常发生的事情,我认为它可以很好地工作。

有一种简单的方法可以做到这一点,但它可能不是最好的方法。使用所需dll的名称创建新的解决方案。在此项目中创建与两个项目名称相同的文件夹结构。然后在特定文件夹上执行“添加现有项”。将cs文件添加到该名称的项目中。添加文件时,请在“添加”按钮上选择“添加为链接”(在“添加”按钮旁边有一个下拉列表供您选择)。继续这样做,并建立。您将拥有dll


如果你有一个名为A和一个名为B的项目,你想将它们合并到一个名为C的dll中。创建一个名为C的新项目。在这个项目中添加一个名为A的文件夹和另一个名为B的文件夹。现在假设项目A有一个cs文件X.cs,B有一个名为Y.cs。在名为A的文件夹上,右键单击并添加现有项。转到项目A并选择X.cs。在“添加”按钮旁边,您将看到一个向下箭头。单击该链接并选择“添加为链接”。对B执行同样的操作。构建此项目,您将在bin文件夹中获得dll。

我可以将ILMerge集成到Visual Studio的构建过程中,以便使任务自动化吗?@kjv这就是ILMerge taks位的意义所在