繁体   English   中英

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

[英]Single Visual Studio C# project, multiple DLLs versions?

我们有一个主项目,使用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,但仅通过更改命令行即可在RELEASE配置中构建3种不同的风格(例如:gcc的-D<buildFlag>样式)? 该解决方案还有其他项目,它们旨在与RELEASE配置一起使用。 我也欢迎其他易于使用和维护的技术。

我们实际上是在尝试避免创建伪项目或影响解决方案中的其他项目(解决方案中的21个项目)-对于某些非常简单的事情来说似乎过于矫/过头。

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

以链接形式将文件添加到项目中

  1. 右键单击该项目,然后单击添加现有项...。
  2. 选择要添加的文件。
  3. 与其单击添加按钮, 不如单击添加按钮旁边的箭头,然后单击添加为链接

我不确定这是否适合您的情况,但是在为不同的.NET Framework版本开发库时,确实为我节省了很多时间。

您是否有完整的周转时间?

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

Microsoft具有ILMerge,而ILRepack是开放源代码替代品,

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

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

这样,您就无需进行条件编译,因为后者很难管理,并且复杂性已转移到打包脚本中,可以轻松地对其进行管理并将其检查到源代码管理中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM