Msbuild:基于文件内容筛选项目组

Msbuild:基于文件内容筛选项目组,msbuild,itemgroup,Msbuild,Itemgroup,我需要根据文件内容过滤一个项目组(包含文件名)。但我不能让它工作 <ItemGroup> <FilteredFiles Include="@(AllFiles)" Condition="$([System.IO.File]::ReadAllText(%(Identity)).Contains('searchText'))" /> </ItemGroup> 我得到这个错误: 错误MS

我需要根据文件内容过滤一个项目组(包含文件名)。但我不能让它工作

  <ItemGroup>
      <FilteredFiles Include="@(AllFiles)" 
      Condition="$([System.IO.File]::ReadAllText(%(Identity)).Contains('searchText'))" />
  </ItemGroup>

我得到这个错误:

错误MSB4184:表达式“[System.IO.File]::ReadAl” 无法计算lText(%(标识))“。找不到文件 'C:\builds\git\RadarTemp%(标识)'


有什么建议吗?

我认为最合适的方法是使用中间项:

<ItemGroup>
  <AllFilesWithSearchResult Include="@(AllFiles)" 
    ContainsSearchText="$([System.IO.File]::ReadAllText('%(Identity)').Contains('searchText'))" />
  <FilteredFiles Include="@(AllFilesWithSearchResult->WithMetadataValue('ContainsSearchText','True'))"/>
</ItemGroup>


效果非常好-谢谢!所以我可以在属性中添加随机的“元数据”(如果这是正确的术语)?以前从未见过。是的,您可以添加元数据和元数据,因为几年前为.NET核心MSbuild项目添加了属性(而不是子元素)