C# 如何在.NET中将一个项目编译成多个DLL

C# 如何在.NET中将一个项目编译成多个DLL,c#,.net,visual-studio-2010,csc,C#,.net,Visual Studio 2010,Csc,我正在尝试将一个.NETC#项目编译成多个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都将使用一些 我使用了以下方

我正在尝试将一个.NETC#项目编译成多个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引用

我希望最好将此作为VisualStudio中后期构建步骤的一部分

谢谢你的时间

编辑

谢谢你的回复。对于将解决方案拆分为多个项目,有许多建议。虽然这是一种方法,但我不确定是否需要为两个dll(即File1.dll和File2.dll)创建任何依赖项。让我解释一下

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

再次感谢您的回复


干杯。

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


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

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


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

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


另一方面,如果您想包含和排除不同的代码片段,请考虑if if语句检查预处理器常数。

您可以使用条件编译符号(<代码>,如果DLL1 ,<代码>,如果DLL2)。 然后,在构建步骤中,使用
/p:DefineConstants
选项调用msbuild来设置这些符号

MSBUILD /p:DefineConstants=DLL1 ...

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

您需要指定要为每个
dll
贡献的
.cs
文件。虽然您可能会发现,由于这些都在一个项目中,所以您具有出乎意料的依赖关系。谢谢Oded。但这意味着每次项目内容发生变化时,我都可能需要修改脚本,对吗?或者至少手动分析整个项目的变化。是否没有开关可以自动将引用的类与它们所在的任何文件/文件夹链接?我希望每次在VS中构建项目时都能引用新文件(如果有的话),而不必每次都包含它们..没错。或者使用不同于内置系统的构建系统,尽管需要保持同步。将项目分成几个部分是最容易的。不同的构建系统是什么意思?我不知道这意味着什么…
cmake
nant
就是两个例子。VisualStudio附带了MSBuild来编译和生成应用程序。不必使用它。这可能是最简单的方法(使用Visual Studio),但肯定不是唯一的方法。事实上,尽管不管怎样,这都是正确的方法。谢谢..这很快:)…因此,当作为链接添加时,这些文件实际位于哪个项目中是否重要?如果File1.CSProj拥有所有文件,而File2.CSProj拥有指向所需文件的链接,那么仍然可以,对吗?这是一件很平常的事吗。。添加为链接,我的意思是。我不想为了完成这项工作而改变良好编码实践的规则。再次感谢。不,不管它们是在哪一个里面。在这种情况下,我可能倾向于将它们添加到“主”项目中。像这样的链接很常见,所以不会违反太多规则。@PhonicUK-很抱歉,我来晚了一点,但这就像右键单击解决方案并进入“添加->新项目”一样简单吗?谢谢Akton。创建多个项目的问题在于,File1.cs和File2.cs都需要一些代码。我不希望它们在两个项目中重复。将公共代码保留在第三个项目中意味着File1.dll和File2.dll都需要第三个dll。我不要这个。我只想要File1.dll和File2.dll,这就是为什么我把它们都放在一个项目中更新我的问题。。。另外,如何从多个项目中引用同一个CS文件?如果有多个项目的解决方案,请右键单击其中一个项目->添加…->现有项目…->浏览到要添加的预先存在的.CS文件。确认这在VS2010中有效,并且非常确定它在以前的版本中有效。如果您将这些设置为项目配置的一部分,这也将使您受益于任何依赖项或c