我正在尝试将一个.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,这就是我将它们保存在一个项目中的原因。关于如何实现这一目标的任何建议?
再次感谢您的回复。
欢呼声。
答案 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 ...
基本上使用不同的条件编译符号集编译项目两次。