我有一个 MSBuild ItemGroup
,我希望能够echo
在“构建后事件”中完成它。
但是,当我尝试以下命令时:echo My ItemGroup: @(Foo)
我得到错误:
错误 MSB4164:元数据“Command”的值“echo My ItemGroup:@(Foo)”包含项目列表表达式。默认元数据值上不允许使用项目列表表达式。
ItemGroup
到目前为止,我对s还不是很好。有没有办法可以只echo
列出包含的文件列表Foo
?
我有一个 MSBuild ItemGroup
,我希望能够echo
在“构建后事件”中完成它。
但是,当我尝试以下命令时:echo My ItemGroup: @(Foo)
我得到错误:
错误 MSB4164:元数据“Command”的值“echo My ItemGroup:@(Foo)”包含项目列表表达式。默认元数据值上不允许使用项目列表表达式。
ItemGroup
到目前为止,我对s还不是很好。有没有办法可以只echo
列出包含的文件列表Foo
?
试试%(Foo.Identity)
吧。这将只打印列表中的一个项目,但会导致包含它的任务(Exec
我想)循环这些项目。
如果这不起作用,请确保直接使用 XML 文件而不是 IDE,以防它转义或放入我们看不到的其他代码。
(稍后)可能就像这篇文章一样,他们感叹它并不简单,无论如何都需要直接编辑 XML。因此,只需将其更改为Exec
itemlist 表达式出现在属性中的任务,而不是元数据定义。
据说这PostBuildEvent
更像是一种向后兼容的东西,最好使用的是AfterBuild
目标,即“能够包含任意 MSBuild 任务,包括一个或多个Exec
任务……它在 IDE 中没有自定义 UI ... 将其编辑为 XML ...”Brian Kretzler 书中的提示 43。
你会想要这样的东西:
<ItemGroup>
<ForcedUsingFilesList Include="c:\path\to\files\*" />
</ItemGroup>
<Target Name="MyTarget">
<PropertyGroup>
<MyFiles>
@(ForcedUsingFilesList->'%(FullPath)')
</MyFiles>
</PropertyGroup>
<Exec>echo $(MyFiles)</Exec>
</Target>