小编Ama*_*hus的帖子

为什么MSBuild ItemGroup条件不在全局范围内工作

我非常好奇为什么我无法根据在目标内部按预期工作的元数据条件在全局范围内创建项目.例如,这可以按预期工作:

<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> …
Run Code Online (Sandbox Code Playgroud)

msbuild

6
推荐指数
1
解决办法
2134
查看次数

标签 统计

msbuild ×1