如何在 MSBuild exec 任务的命令行上传递引用的文件列表?

How does one pass a quoted list of files on a command line in an MSBuild exec task?

我有一个程序,我们称它为 q.exe,它在命令行上接受引用路径列表。我有一个 MSBuild 项目,其中包含要在该命令行上传递的文件。我应该如何传递这样的文件列表?

您可以将任何 MSBuild 项目转换为带引号的 space 分隔字符串,项目规范类似于以下内容:

@(AnyMSBuildItem->'"%(FullPath)"', ' ')

导致类似:

<ItemGroup>
  <ProcessMe Include="..." />
  <ProcessMe Include="..." />
  <ProcessMe Include="..." />
</ItemGroup>
<Target Name="Build">
  <Exec Command="q.exe @(ProcessMe->'&quot;%(FullPath)&quot;', ' ')" />
</Target>

这通过使用 -> 语法添加引号,并使用 , 语法将分隔符从默认的 ; 更改为 space。