Bri*_*anH 19 c# compiler-construction msbuild c-preprocessor
我需要创建一个包含多个项目的现有大型应用程序的演示版本.我想使用现有项目,并通过预处理器指令中性化功能
#if DEMO
mycode.NeuterNow();
#endif
Run Code Online (Sandbox Code Playgroud)
我们正在使用MSBuild构建我们的应用程序,我理想地使用以下内容:
MSBuild -DefineProperty:DEMO MySolution.sln
Run Code Online (Sandbox Code Playgroud)
这样的功能是否存在?
con*_*tor 14
尝试
msbuild /p:DefineConstants=DEBUG;DEMO MySolution.sln
Run Code Online (Sandbox Code Playgroud)
您必须包含DEBUG或RELEASE以及已在解决方案文件中定义的任何其他常量,但我认为这应该有效.免责声明:我自己从未尝试过.
在寻求自己解决这个问题的方法时,我发现了一些有趣的事情,我想我会分享。
MSBuild 中的 /p 指令不限于构建文件中已存在的属性。你可以用它来设置任何东西。
因此,例如,如果您使用 $(FeatureSet) 引导预处理器指令,然后调用 MSBuild,例如
MSBuild solution.sln /p:FeatureSet=DEMO
Run Code Online (Sandbox Code Playgroud)
它相应地获得#defined,而无需手动破坏并重新指定您正在运行的任何其他预处理器指令。
我已经验证了这在 VS2010 中有效。不太确定如何为没有 MSBuild 的 Visual Studio 内部完成的构建定义 FeatureSet。