我们有一个主项目,它使用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个项目) - 对于非常简单的事情来说似乎是一种过度/苛刻。
答案 0 :(得分:0)
我没有对命令行做过任何事情,但是为了解决类似的问题,我创建了单独的项目(定义了Framework Target和任何条件编译符号),然后将所有项目文件添加为LINKED文件。这样,我只需要修改一组源文件,但每个项目都会编译成自己的DLL。
将文件作为链接
添加到项目中我不确定这是否适用于您的情况,但在为不同的.NET框架版本开发库时,确实为我节省了大量时间。
答案 1 :(得分:0)
你有可能完全转变吗?
您可以为每个功能创建单独的项目,然后在打包阶段将较小的程序集合并为一个,而不是在单个库中定义所有功能然后禁用其中的一些功能。
Microsoft拥有ILMerge,而ILRepack是一个开源替代品,
https://www.nuget.org/packages/ilmerge
https://www.nuget.org/packages/ILRepack/
然后你没有条件编译,这很难管理,复杂性转移到你的打包脚本,可以很容易地管理和检查源代码管理。