我需要创建由多个项目组成的现有大型应用程序的演示版本。 我想使用现有的项目,并通过预处理器指令中性化功能
#if DEMO
mycode.NeuterNow();
#endif
我们正在使用 MSBuild 构建我们的应用程序,我最好使用以下内容:
MSBuild -DefineProperty:DEMO MySolution.sln
有这样的功能吗?
尝试
msbuild /p:DefineConstants=DEBUG;DEMO MySolution.sln
您必须包含 DEBUG 或 RELEASE 以及解决方案文件中已定义的任何其他常量,但我认为这应该可行。免责声明:我自己从未真正尝试过。
这是这个的重复,是的,/p:DefineConstants确实工作正常,配置器是正确的,这将覆盖项目文件中已经定义的所有条件符号(恕我直言,这很好),所以你将拥有定义它们。
在寻求自己的解决方案时,我发现了一些有趣的事情,我想分享一下。
MSBuild 中的 /p 指令不限于构建文件中已存在的属性。您可以用它来设置任何东西。
因此,例如,如果您使用 $(FeatureSet) 引导预处理器指令,然后调用 MSBuild,例如
MSBuild solution.sln /p:FeatureSet=DEMO
它会相应地获得#define,而无需手动破坏和重新指定您正在运行的任何其他预处理器指令。
我已经在 VS2010 中验证了它的工作原理。不太确定如何在没有 MSBuild 的情况下为在 Visual Studio 中完成的构建定义 FeatureSet。