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

时间:2014-06-11 08:06:54

标签: 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>

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

1 个答案:

答案 0 :(得分:17)

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

首先传递您自己的DefineConstants,以防止它稍后从.csproj设置,以防止它在您的项目属性窗口中添加$(Constants)之类的内容,这将重新定义{{1} }} DefineConstants并从MSBuild / NAnt脚本传递<DefineConstants>TRACE;DEBUG;$(Constants)</DefineConstants>

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

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

enter image description here