22

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

#if DEMO
    mycode.NeuterNow();
#endif

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

MSBuild -DefineProperty:DEMO MySolution.sln

是否存在这样的功能?

4

3 回答 3

17

尝试

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

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

于 2009-01-27T22:18:03.070 回答
10

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

于 2009-01-27T22:21:03.113 回答
5

在寻求自己解决这个问题的方法时,我发现了一些有趣的事情,我想我会分享。

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

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

MSBuild solution.sln /p:FeatureSet=DEMO

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

我已经验证了这在 VS2010 中有效。不太确定如何为在没有 MSBuild 的 Visual Studio 中完成的构建定义 FeatureSet。

于 2012-12-28T08:03:16.580 回答