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



我正在尝试编译一个。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.dll的File1.cs中引用,在File2.dll中也引用?

我想最好将此作为Visual studio中后期构建步骤的一部分。

谢谢你抽出时间。。。

编辑

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

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

再次感谢您的回复。

欢呼。

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

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

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

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

MSBUILD /p:DefineConstants=DLL1 ...

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

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

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

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

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

最新更新