我遇到了一个需要读取项目构建属性中设置的条件编译符号的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,但不知何故,项目属性中设置的值不会在这里传递。任何人都可以帮助我缺少什么?
答案 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