MSBuild 筛选条件文件的 ItemGroup

Ada*_*dam 3 msbuild

感觉这很简单,但我无法让它工作。

我想要实现的只是一个过滤后的嵌入资源列表。我尝试了各种方法,但似乎无法正确解决。

这是我认为正确的解决方案:

<ItemGroup>
  <AllEmbeddedResources Include="@(EmbeddedResource)" Condition="$(FullPath.Contains('Change')"/>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

编辑...澄清一下,结果是没有条件的,列表是所有嵌入的资源,有条件,组为空。

我已经在目标的内部和外部尝试过这个,并且我尝试在一个组中获取完整列表,然后在一个单独的组中进行过滤。我知道我只是误解了 msbuild 语法的一些基本部分,我似乎无法解决。期待看到我愚蠢的错误!

Mar*_*ich 6

在目标内部,这可以使用项目的批处理语法并使用System.String.Copy能够在字符串上调用实例函数的方法来完成:

<Target Name="ListAllEmbeddedResources">
  <ItemGroup>
    <AllEmbeddedResources Include="@(EmbeddedResource)" Condition="$([System.String]::Copy(%(FullPath)).Contains('Change'))" />
  </ItemGroup>
  <Message Importance="high" Text="AllEmbeddedResources: %(AllEmbeddedResources.Identity)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

请注意,此语法仅适用于目标内部,而不适用于静态评估(直接位于<Project>节点下的项目组)。