使用 MSBuild 从命令行定义预处理器值[重复]

问题描述 投票:0回答:3

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

#if DEMO
    mycode.NeuterNow();
#endif

我们正在使用 MSBuild 构建我们的应用程序,我最好使用以下内容:

MSBuild -DefineProperty:DEMO MySolution.sln

有这样的功能吗?

c# msbuild c-preprocessor
3个回答
19
投票

尝试

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

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


12
投票

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


8
投票

在寻求自己的解决方案时,我发现了一些有趣的事情,我想分享一下。

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

因此,例如,如果您使用 $(FeatureSet) 引导预处理器指令,然后调用 MSBuild,例如

MSBuild solution.sln /p:FeatureSet=DEMO

它会相应地获得#define,而无需手动破坏和重新指定您正在运行的任何其他预处理器指令。

我已经在 VS2010 中验证了它的工作原理。不太确定如何在没有 MSBuild 的情况下为在 Visual Studio 中完成的构建定义 FeatureSet。

© www.soinside.com 2019 - 2024. All rights reserved.