如何使用MSBuild在项目属性中附加条件编译符号?

Afr*_*Ali 11 c# msbuild msbuild-4.0

我陷入了一种情况,我有一个MSBuild脚本需要读取项目的构建属性中设置的条件编译符号.我在MSBuild脚本文件中有以下代码

  <PropertyGroup>
    <DefineConstants>$(DefineConstants);INTER</DefineConstants>
  </PropertyGroup>


  <Target Name="Compile">
    <Message Text="$(DefineConstants)"/>
    <MSBuild Projects="CustomAssemblyInfo.csproj" Targets="Rebuild"  Properties="DefineConstants=$(DefineConstants)" />
  </Target>
Run Code Online (Sandbox Code Playgroud)

我假设$(DefineConstants); 将包含已设置的条件编译符号的值,我可以在这些值之后附加任何内容,例如在这种情况下INTER,但不知何故,项目属性中设置的值不会在这里传递.任何人都可以帮助我缺少什么?

Ily*_*kov 18

通过task的属性传递的Properties属性MSBuild是所谓的全局属性,与/p:在命令行上传递的属性相同.它们优先于任何其他属性或环境变量,即使是那些无条件定义的属性,即DefineConstants你的.csproj.

通过将自己的DefineConstants第一次,你防止它被后来从设定.csproj,所以要防止它添加喜欢的东西$(Constants)在你的项目属性窗口,这将重新定义DefineConstants<DefineConstants>TRACE;DEBUG;$(Constants)</DefineConstants>,并通过Constants您的MSBuild /南特脚本来代替.

编辑:根据@sǝɯɐs评论如下

https://i.imgur.com/jZiVy7J.png

在此输入图像描述