从 MsBuild 定义 C# 预处理器

l33*_*33t 3 c# msbuild

在我的C#文件中,我想要这样的预处理器条件:

#if DEMO
    ShowSplash();
#endif
Run Code Online (Sandbox Code Playgroud)

我正在从命令行运行此命令:

MSBuild MySolution.sln /p:Configuration=Release /p:Platform="Any CPU" /p:DEMO=1
Run Code Online (Sandbox Code Playgroud)

然后,在MyProject.csproj文件中我有以下内容:

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

但预处理器似乎跳过了我的启动代码。(我知道“Any CPU”和“AnyCPU”之间的区别。我从未接触过它,所以我很确定 Visual Studio 不关心空间。)

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

JM *_*uer 8

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

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

.csproj文件中,在第一项<DefineConstants>或创建另一个<PropertyGroup>部分之后,添加行:

<DefineConstants Condition="'$(DEMO)'=='1'">$(DefineConstants);DEMO</DefineConstants>
Run Code Online (Sandbox Code Playgroud)

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