如何从MSBuild中的ItemGroup构建PropertyGroup条目?
我对MSBuild非常陌生,很难理解如何从条件部分构造PropertyGroup条目 以下是我所拥有的,但不起作用:如何从MSBuild中的ItemGroup构建PropertyGroup条目?,msbuild,Msbuild,我对MSBuild非常陌生,很难理解如何从条件部分构造PropertyGroup条目 以下是我所拥有的,但不起作用: <ItemGroup> <CompilerDirective Include="DEBUG_PARANOID" Condition=" '$(SomeFlag)' == 'true' "/> <CompilerDirective Include="DEBUG"/> <CompilerDirective Includ
<ItemGroup>
<CompilerDirective Include="DEBUG_PARANOID" Condition=" '$(SomeFlag)' == 'true' "/>
<CompilerDirective Include="DEBUG"/>
<CompilerDirective Include="TRACE"/>
</ItemGroup>
<PropertyGroup>
...
<DefineConstants>@(CompilerDirective)</DefineConstants>
...
</PropertyGroup>
...
@(编者指导)
...
我希望得到定义的常量显示为DEBUG_PARANOID;调试;如果SomeFlag设置为true,则跟踪,如果未设置,则忽略DEBUG_PARANOID。顺便说一下,这是给a.csproj的
如果我用消息任务打印@(CompilerDirective),它会工作
我的问题是如何在PropertyGroup条目中执行此操作?上面的内容可以执行。我运行了以下命令:
<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>
@(编者指导)
并得到了正确的输出
调试;痕迹
或
偏执狂;调试;痕迹
取决于属性的值。这在什么方面对你不起作用?好吧,那怎么样。。好的,我认为它不起作用的原因是,当我在VS中查看构建属性时,它们会以@(CompilerDirective)的形式出现,而不是扩展列表。我假设它会扩展它,因为它也会扩展
USER_$(USERNAME.ToUpper())
(在我的示例中,我省略了它以减少噪音)。好的,谢谢你!顺便说一句:从ItemGroups构造属性是不好的形式。只需从其他属性构造一个属性。这样就容易多了。ItemGroups指向文件,而不是任意字符串。