你如何过滤ItemGroup?

Sco*_*ham 5 msbuild

我正在尝试从另一个创建过滤的项目组,其中过滤的项目组将仅包含来自第一个组的具有指定文件扩展名的项目.

我收到以下错误:

错误MSB4190:在这种情况下,''(扩展名)'=='.sys'"不允许在位置1引用内置元数据"扩展".

当我运行这个:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
         DefaultTargets="Go"
         ToolsVersion="4.0">

  <ItemGroup>
    <Files Include="X.exe"/>
    <Files Include="Y.sys"/>
  </ItemGroup>

  <ItemGroup>
    <SysFiles Include="%(Files.Identity)" Condition="'%(Extension)'=='.sys'">
    </SysFiles>
  </ItemGroup>

  <Target Name="Go">
    <Message Text="SysFiles=@(SysFiles)"/>
  </Target>

</Project>
Run Code Online (Sandbox Code Playgroud)

首先,我无法理解为什么这个位置不允许使用元数据?它是msbuild的一些人为限制或未实现的部分吗?

其次,实现这种转变的简洁方法是什么?

非常感谢.

Sco*_*ham 5

好的,我发现如果我在目标 Go 中指定 ItemGroup SysFiles,它将正常工作。