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

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

#if DEMO mycode.NeuterNow(); #endif 

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

 MSBuild -DefineProperty:DEMO MySolution.sln 

这样的function是否存在?

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

尝试

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

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

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

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

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

 MSBuild solution.sln /p:FeatureSet=DEMO 

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

我在VS2010中validation了这个function。 对于如何在没有MSBuild的Visual Studio内完成的构建定义FeatureSet不太确定。