我对MSBuild很新,并且无法弄清楚如何从条件部分构造PropertyGroup条目。
这就是我所拥有的,这是行不通的:
<ItemGroup>
<CompilerDirective Include="DEBUG_PARANOID" Condition=" '$(SomeFlag)' == 'true' "/>
<CompilerDirective Include="DEBUG"/>
<CompilerDirective Include="TRACE"/>
</ItemGroup>
<PropertyGroup>
...
<DefineConstants>@(CompilerDirective)</DefineConstants>
...
</PropertyGroup>
我希望定义的常量显示为DEBUG_PARANOID; DEBUG;如果SomeFlag设置为true则为TRACE,否则将省略DEBUG_PARANOID。顺便说一句,这是针对.csproj的。
如果我使用消息任务打印出@(CompilerDirective),它就能正常工作。
我的问题是如何在PropertyGroup条目中完成这项工作?
答案 0 :(得分:7)
你的上述作品。我跑了这个:
<Target Name="Test">
<ItemGroup>
<CompilerDirective Include="DEBUG_PARANOID"
Condition=" '$(SomeFlag)' == 'true' "/>
<CompilerDirective Include="DEBUG"/>
<CompilerDirective Include="TRACE"/>
</ItemGroup>
<PropertyGroup>
<DefineConstants>@(CompilerDirective)</DefineConstants>
</PropertyGroup>
<Message Text="$(DefineConstants)" />
</Target>
并获得正确的输出 DEBUG,TRACE 要么 DEBUG_PARANOID; DEBUG,TRACE 取决于财产的价值。这对你不起作用的方式是什么?