7

我正在尝试将一个 .Net c# 项目编译成多个 dll。但事情就是这样。

这是我的项目结构。

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

我想把这个项目编译成 File1.dll 和 File2.dll。File1.dll 和 File2.dll 都使用 Dir1 和 Dir2 中的各种 .cs 文件中的代码。File1.cs 需要子目录中的 .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 引用,对于 File1.dll 和类似的文件2.dll?

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

谢谢你的时间...

编辑

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

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

再次感谢您的回复。

干杯。

4

4 回答 4

11

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

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

于 2012-09-11T12:52:58.833 回答
3

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

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

MSBUILD /p:DefineConstants=DLL1 ...

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

于 2012-09-11T12:56:45.370 回答
2

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

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

于 2012-09-11T12:54:16.007 回答
1

您需要多个项目来执行此操作。没有什么能阻止您从多个项目中引用同一个 CS 文件。

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

于 2012-09-11T12:54:03.587 回答