我陷入了这样的境地:我有一个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