我非常好奇为什么我无法根据在目标内部按预期工作的元数据条件在全局范围内创建项目.例如,这可以按预期工作:
<ItemGroup>
<TestItems Include="TestItem1">
<TestFlag>true</TestFlag>
</TestItems>
<TestItems Include="TestItem2">
<TestFlag>false</TestFlag>
</TestItems>
</ItemGroup>
<Target Name="Default">
<Message Text="@(TestItems)" />
<Message Text="@(TestItems)" Condition="'%(TestItems.TestFlag)'=='true'" />
<ItemGroup>
<FilteredTestItems Include="@(TestItems)" Condition="'%(TestItems.TestFlag)'=='true'" />
</ItemGroup>
<Message Text="@(FilteredTestItems)" />
<Message Text="@(FilteredTestItems)" Condition="'%(FilteredTestItems.TestFlag)'=='true'" />
</Target>
Run Code Online (Sandbox Code Playgroud)
并产生以下输出:
TestItem1; TestItem2 TestItem1 TestItem1 TestItem1
这符合预期:
<ItemGroup>
<TestItems Include="TestItem1">
<TestFlag>true</TestFlag>
</TestItems>
<TestItems Include="TestItem2">
<TestFlag>false</TestFlag>
</TestItems>
</ItemGroup>
<ItemGroup>
<FilteredTestItems Include="@(TestItems)" Condition="'false'=='true'" />
</ItemGroup>
<Target Name="Default">
<Message Text="@(TestItems)" />
<Message Text="@(TestItems)" Condition="'%(TestItems.TestFlag)'=='true'" />
<Message Text="@(FilteredTestItems)" />
<Message Text="@(FilteredTestItems)" Condition="'%(FilteredTestItems.TestFlag)'=='true'" />
</Target>
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
TestItem1; TestItem2 TestItem1
但是这个:
<ItemGroup>
<TestItems Include="TestItem1">
<TestFlag>true</TestFlag>
</TestItems>
<TestItems Include="TestItem2">
<TestFlag>false</TestFlag>
</TestItems>
</ItemGroup>
<ItemGroup>
<FilteredTestItems Include="@(TestItems)" Condition="'%(TestItems.TestFlag)'=='true'" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
产生以下MSBuild错误:
temp.proj(13,45):错误MSB4090:在条件"'%(TestItems.TestFlag)'=='true'"中的位置2处发现意外字符'%'.
什么给出了什么?当然我可以解决它,但究竟我对ItemGroup,元数据和/或全局范围的理解是什么?
项目组条件在目标之外起作用,但批处理则不然(即“%”运算符)。当您调用任务时会使用批处理,并且由于您只能从目标内部调用任务,因此批处理也只能在目标内部工作是有意义的。
您可能会问为什么项目组在目标内部工作,因为它不是任务。在 MSBuild 3.5 之前,根本不允许您在目标内使用项目组;你必须打电话CreateItem。在版本 3.5 和 4.0 中,允许以这种方式使用项目组,但我认为这只是调用任务的语法糖CreateItem,所以你的条件有效,因为幕后有一个任务。
| 归档时间: |
|
| 查看次数: |
2134 次 |
| 最近记录: |