单个Visual Studio C#项目,多个DLL版本?

时间:2014-04-10 22:33:51

标签: c# visual-studio dll msbuild

我们有一个主项目,它使用FEATURE_1,FEATURE_2和FEATURE_3创建一个DLL作为三个条件编译符号,以启用这些相应的功能。

  

MyLib.dll =>已编译FEATURE_1,FEATURE_2和FEATURE_3

我们现在希望有相同的主项目吐出3个不同的DLL,如下所示:

MyLib.1.dll => has only FEATURE_1 compiled in
MyLib.2.dll => has only FEATURE_2 compiled in
MyLib.3.dll => has only FEATURE_3 compiled in

目前我们在VS2013中构建,那些编译常量是在.csproj文件(在<DefineConstants> </DefineConstants>标签内)中定义的,它们对它们进行硬编码。

是否可以通过命令行传递它们,这样我们仍然可以维护一个主csproj但只是通过更改命令行(例如:gcc的-D<buildFlag>样式)在RELEASE配置中构建3种不同的风格?该解决方案还有其他项目,它们旨在与RELEASE配置一起使用。我也对任何其他易于使用和维护的技术持开放态度。

我们真的试图避免创建伪项目或影响解决方案中的其他项目(解决方案中的21个项目) - 对于非常简单的事情来说似乎是一种过度/苛刻。

2 个答案:

答案 0 :(得分:0)

我没有对命令行做过任何事情,但是为了解决类似的问题,我创建了单独的项目(定义了Framework Target和任何条件编译符号),然后将所有项目文件添加为LINKED文件。这样,我只需要修改一组源文件,但每个项目都会编译成自己的DLL。

将文件作为链接

添加到项目中
  1. 右键单击该项目,然后单击添加现有项目...
  2. 选择要添加的文件(或文件)。
  3. 而不是点击“添加”按钮,点击“添加”按钮旁边的箭头,然后点击添加为链接
  4. 我不确定这是否适用于您的情况,但在为不同的.NET框架版本开发库时,确实为我节省了大量时间。

答案 1 :(得分:0)

你有可能完全转变吗?

您可以为每个功能创建单独的项目,然后在打包阶段将较小的程序集合并为一个,而不是在单个库中定义所有功能然后禁用其中的一些功能。

Microsoft拥有ILMerge,而ILRepack是一个开源替代品,

https://www.nuget.org/packages/ilmerge

https://www.nuget.org/packages/ILRepack/

然后你没有条件编译,这很难管理,复杂性转移到你的打包脚本,可以很容易地管理和检查源代码管理。