从MsBuild定义C#预处理器

从MsBuild定义C#预处理器,c#,msbuild,C#,Msbuild,在我的C#文件中,我希望有这样一个预处理器条件: #if DEMO ShowSplash(); #endif 我正在从命令行运行此命令: MSBuild MySolution.sln /p:Configuration=Release /p:Platform="Any CPU" /p:DEMO=1 然后,在MyProject.csproj文件中,我有以下内容: <PropertyGroup Condition=" '$(Configuration)|$(Platform)' ==

在我的
C#
文件中,我希望有这样一个预处理器条件:

#if DEMO
    ShowSplash();
#endif
我正在从命令行运行此命令:

MSBuild MySolution.sln /p:Configuration=Release /p:Platform="Any CPU" /p:DEMO=1
然后,在
MyProject.csproj
文件中,我有以下内容:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DefineConstants>TRACE;DEMO=$(DEMO)</DefineConstants>
</PropertyGroup>

痕迹;演示=$(演示)
但是预处理器似乎跳过了我的启动代码。(我知道“任意CPU”和“任意CPU”之间的区别。我从来没有碰过它,所以我很确定Visual Studio不在乎空间。)


DEMO
未定义?相同的构造似乎适用于其他项目类型(例如,
.wixproj
我在这里缺少什么?

首先,您应该在这里定义(并在代码中测试)符号:
DEMO

然后,您应该有条件地将符号添加到现有符号(最终在项目属性中定义的符号):

.csproj
文件中,在第一项
或创建另一项
部分后,添加行:
$(定义常量);演示


PS:这是一个经过测试的解决方案。

在编辑
.csproj
后是否尝试清理/重建项目?否,但我现在确实看到了:
警告MSB3052:编译器的参数无效,“/define:DEMO=1”
跟踪$(DefineConstants);DEMO您可能会以不同的方式使用命令行,例如
MSBuild MySolution.sln/p:Configuration=Release/p:Platform=“Any CPU”/p:Conditionals=DEMO
。然后在项目中使用
TRACE$(条件句)
。(可能有效,也可能无效;我还没有测试过它…@PetSerAl,有效。似乎CSC不支持
#如果X=1
。把那东西写在答案里,我会接受的。