使用MSBuild从命令行定义预处理器值

时间:2009-01-27 21:01:54

标签: c# compiler-construction msbuild c-preprocessor

我需要创建一个包含多个项目的现有大型应用程序的演示版本。我想使用现有的项目,只需通过预处理器指令中性化功能

#if DEMO
    mycode.NeuterNow();
#endif

我们正在使用MSBuild构建我们的应用程序,理想情况下我会使用以下内容:

MSBuild -DefineProperty:DEMO MySolution.sln

是否存在此类功能?

3 个答案:

答案 0 :(得分:14)

尝试

msbuild /p:DefineConstants=DEBUG;DEMO MySolution.sln

您必须包含DEBUG或RELEASE以及已在解决方案文件中定义的任何其他常量,但我认为这应该有效。免责声明:我自己从未尝试过。

答案 1 :(得分:9)

That's a duplicate of this one,是的,/ p:DefineConstants工作正常,配置器是正确的,这将覆盖已经在项目文件中定义的所有条件符号(这是很好的恕我直言),所以你必须定义它们。

答案 2 :(得分:4)

我在寻找自己的解决方案时发现了一些有趣的东西,我想我会分享。

MSBuild中的/ p指令不仅限于构建文件中已存在的属性。你可以用它来设置任何东西。

因此,例如,如果您使用$(FeatureSet)引导预处理程序指令,然后将MSBuild称为,例如

MSBuild solution.sln /p:FeatureSet=DEMO

它相应地得到#defined,而不必手动破坏并重新指定你运行的任何其他预处理程序指令。

我已经在VS2010中验证了这一点。对于如何在没有MSBuild的情况下在Visual Studio内完成构建定义FeatureSet,不太确定。