2012-09-11 49 views
5

我试图将一个.Net c#项目编译为多个dll。但是,这是事情。如何在.NET中将一个项目编译为多个dll

这是我的项目结构。

Bin 
Dir1 
Dir2 
File1.cs 
File2.cs 
myproject.csproj 

我想将此项目编译为File1.dll和File2.dll。 File1.dll和File2.dll都使用Dir1和Dir2中各种.cs文件中的代码。子目录中存在的.cs文件中的某些类是File1.cs所需的,其他类是File2.cs所必需的。将有一些由File1.cs和File2.cs使用。

我用下面的:

csc /t:library /out:File1.dll /recurse:*.cs 
csc /t:library /out:File2.dll /recurse:*.cs 

但由此产生的DLL只用不同的文件名彼此的精确副本。有没有办法让我编译它们,以便当我检查对象浏览器中的每个dll时,它只有来自Dir1和Dir2中的.cs文件中的File1.cs中为File1.dll引用的类以及类似的File2.dll?

我希望这样做最好作为Visual Studio中构建后步骤的一部分。

感谢您的时间...

编辑

感谢您的答复。有很多建议将解决方案分解为许多项目。虽然这是做到这一点的一种方式,但我不确定是否需要为两个DLL(即File1.dll和File2.dll)创建的任何依赖关系。让我解释一下..

我看到创建多个项目的问题是会有一些代码需要File1.cs和File2.cs。我不希望他们在两个项目中重复。将通用代码保留在第三个项目中意味着将创建File1.dll和File2.dll所需的第三个DLL。我不想要这个。我只想创建File1.dll和File2.dll,这就是为什么我将它们都保存在一个项目中的原因。有关如何做到这一点的任何建议?

再次感谢您的回复。

欢呼声。

+0

你需要指定你想贡献给每个'dll'的'.cs'文件。尽管你可能会发现,因为这些都在一个项目中,所以你有没有想到的依赖关系。 – Oded

+0

感谢Oded。但那意味着每次项目内容改变时我都需要改变我的脚本,对吧?或者至少手动分析整个项目的变化。是否没有可以自动链接所引用的类的文件/文件夹的开关?我希望每次在VS中构建项目时都要引用新文件,而不必每次都包含它们。 – user20358

+0

没错。或者使用内置的其他构建系统,但需要保持同步。将项目分解为几个将是最简单的。 – Oded

回答

9

如果您需要为每个组件分别创建库,则需要将项目拆分为同一解决方案中的多个项目。

您可以将多个项目中包含的相同文件包含在多个项目中,而不会创建重复副本(Add as link)以避免重复代码出现问题。

+0

可能是_easiest_的方法(使用Visual Studio),但绝对不是唯一的方法。 – Oded

+0

事实上,尽管不管它是否是正确的方式来做到这一点。 – PhonicUK

+0

更新了我的问题... – user20358

1

你需要多个项目才能做到这一点。没有什么能阻止你从多个项目中引用同一个CS文件。

另外,如果这样做有意义,如果需要逻辑分组,则两个项目都可以存在于一个解决方案下。

+0

更新了我的问题...另外,您如何从多个项目中引用同一个CS文件? – user20358

+0

如果您有多个项目的解决方案,请右键单击其中一个项目 - >添加... - >现有项目... - >浏览到您要添加的预先存在的.CS文件。证实了这个在VS2010中的作品,并确定它在以前的版本中有效。 – Sepster

2

为每个要生成的DLL创建一个项目,并为每个DLL添加特定的文件。例如myproject1.csproj包含File1.cs(和其他文件根据需要)和myproject2.csproj包含File2.cs。之后,创建第三个项目,其中包含前两个共享程序集中的任何常用文件和参考。

或者,如果您想要包含和排除不同的代码片段,请考虑#if语句检查预处理器常量。

+0

谢谢阿克顿。创建多个项目的问题是会有一些File1.cs和File2.cs需要的代码。我不希望他们在两个项目中重复。将通用代码保留在第三个项目中意味着File1.dll和File2.dll都需要第三个dll。我不想要这个。我只想要File1.dll和File2.dll,这就是为什么我将它们都保存在一个项目中 – user20358

1

您可以使用条件编译符号(#if DLL1,#if DLL2)。

然后,在构建步骤中,使用/p:DefineConstants选项调用msbuild来设置这些符号。

MSBUILD /p:DefineConstants=DLL1 ... 

基本上用不同的条件编译符号集编译你的项目两次。

+0

谢谢。我不确定这是如何工作的。让我检查一下,然后回来.. – user20358

+0

如果您将它们设置为项目配置的一部分,这也将使您在IDE中工作时受益于任何依赖性或编译错误。 – StingyJack

相关问题