我陷入了这样的境地:我有一个msbuild脚本,需要读取project的build属性中设置的条件编译符号。我的msbuild脚本文件中有以下代码

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


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

我假设$$(DealEngestStand)将包含已设置的条件编译符号的值,并且在这种情况下,我可以只追加任何值,但是在项目属性中设置的值不会在这里传递。谁能帮助我,我错过了什么?

最佳答案

通过Properties任务的MSBuild属性传递的属性称为全局属性,与在命令行上通过/p:传递的属性相同。它们优先于任何其他属性或环境变量,甚至是那些无条件定义的属性或环境变量,即DefineConstants中的.csproj
通过首先传递自己的DefineConstants,可以防止以后从.csproj设置它,从而防止它在“项目属性”窗口中添加类似于$(Constants)的内容,该窗口将DefineConstants重新定义为<DefineConstants>TRACE;DEBUG;$(Constants)</DefineConstants>,并从msbuild/nant脚本传递Constants
编辑:根据以下@s__注释
https://i.imgur.com/jZiVy7J.png

10-08 14:01