echo ItemGroup的所有元素

echo All Elements of an ItemGroup

本文关键字:元素 ItemGroup echo      更新时间:2023-10-16

我有一个MSBuild ItemGroup,我希望能够在"后生成事件"中echo

然而,当我尝试像echo My ItemGroup: @(Foo) 这样的命令时

我得到错误:

错误MSB4164:元数据"Command"的值"echo My ItemGroup:@(Foo)"包含项列表表达式。默认元数据值上不允许使用项列表表达式。

到目前为止,我还不太擅长ItemGroup。有没有办法我只echo Foo包含的文件列表?

请改用%(Foo.Identity)。这将只打印列表中的一个项目,但会导致包含它的Task(我想是Exec)在这些项目上循环。

如果这不起作用,请确保直接使用XML文件而不是IDE,以防它转义或放入我们看不到的其他代码。

(稍后)可能就像这篇文章一样,他们哀叹它并不简单,无论如何都需要直接编辑XML。因此,只需将其更改为Exec任务,其中项列表表达式显示在属性中,而不是元数据定义中。

有人写道,PostBuildEvent更像是一个向后兼容的东西,最好使用的是AfterBuild目标,它"能够包含任意MSBuild任务,包括一个或多个Exec任务……它在IDE中没有自定义UI……将其编辑为XML……"Brian Kretzler书中的提示43。

您会想要类似以下内容:

<ItemGroup>
  <ForcedUsingFilesList Include="c:pathtofiles*" />
</ItemGroup>
<Target Name="MyTarget">
  <PropertyGroup>
    <MyFiles>
        @(ForcedUsingFilesList->'%(FullPath)')
    </MyFiles>
  </PropertyGroup>
  <Exec>echo $(MyFiles)</Exec>
</Target>