我需要创建一个包含多个项目的现有大型应用程序的演示版本。我想使用现有的项目,并通过预处理器指令中性化功能
#if DEMO
mycode.NeuterNow();
#endif
我们正在使用 MSBuild 构建我们的应用程序,理想情况下我会使用以下内容:
MSBuild -DefineProperty:DEMO MySolution.sln
是否存在这样的功能?
我需要创建一个包含多个项目的现有大型应用程序的演示版本。我想使用现有的项目,并通过预处理器指令中性化功能
#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
它会相应地得到#defined,而无需手动破坏并重新指定您正在运行的任何其他预处理器指令。
我已经验证了这在 VS2010 中有效。不太确定如何为在没有 MSBuild 的 Visual Studio 中完成的构建定义 FeatureSet。