echo ItemGroup的所有元素

时间:2014-11-07 12:56:50

标签: c++ visual-c++ msbuild echo itemgroup

我有一个MSBuild ItemGroup,我希望能够在“构建后事件”中echo

然而,当我尝试以下命令时:echo My ItemGroup: @(Foo)

我收到错误:

  

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

到目前为止,我对ItemGroup的态度还不是很好。有没有办法可以echo Foo包含的文件列表?

2 个答案:

答案 0 :(得分:2)

请尝试使用%(Foo.Identity)。这将只从列表中打印一个项目,但导致包含它的任务(我认为Exec)循环遍历项目。

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

(稍后) 它可能像this post,他们感叹它并不简单,无论如何都需要直接编辑XML。因此,只需将其更改为Exec任务,其中itemlist表达式出现在属性中,而不是元数据定义。

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

答案 1 :(得分:1)

你想要的东西是:

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