如何在.NET中将一个项目编译成多个dll

时间:2012-09-11 12:51:03

标签: c# .net visual-studio-2010 csc

我正在尝试将一个.Net c#项目编译成多个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,这就是我将它们保存在一个项目中的原因。关于如何实现这一目标的任何建议?

再次感谢您的回复。

欢呼声。

4 个答案:

答案 0 :(得分:10)

如果您希望每个组件都有单独的库,则需要将项目拆分为同一解决方案中的多个项目。

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

您需要多个项目才能执行此操作。没有什么可以阻止您从多个项目引用相同的CS文件。

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

答案 3 :(得分:1)

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

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

MSBUILD /p:DefineConstants=DLL1 ...

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