MSBuild:如何将文件复制到由执行命令的输出确定的 DestinationFolder?

MSBuild: How do I CopyFiles to DestinationFolder that is determined by output of executing a command?

我需要将特定的 git 挂钩文件复制到 MSBuild 上的本地存储库中,以强制执行一些客户端验证,这通常可以正常工作,但是,我注意到在某些特殊情况下,工作树的设置略有不同从建议的配置。如果在从 git rev-parse --git-path hooks.

执行任务时获取下面的 DestPath,则可以解决此问题
<Target Name="CopyFiles" AfterTargets="Build">
  <Copy SourceFiles="@(HookFiles)"
        DestinationFolder="$(DestPath)" 
        OverwriteReadOnlyFiles="True"
/>

我的猜测是在 Copy 前面添加一个 Exec 任务来收集变量,但我不确定如何使输出在 Copy 任务中可用。

<Exec Command="git rev-parse --git-path hooks"/>

感谢 Gathering outputs from an MSBuild exec task 中的回答,我设法通过执行命令并将输出重定向到文本文件来处理它。

<PropertyGroup>
 <OutputFile>$(MSBuildThisFileDirectory)temp.txt</OutputFile>
</PropertyGroup>

<Exec Command="git rev-parse --path-format=absolute --git-path hooks > &quot;$(OutputFile)&quot;" />

然后从文本文件中读取值。

<ReadLinesFromFile File="$(OutputFile)">
  <Output TaskParameter="Lines" ItemName="OutputLines"/>
</ReadLinesFromFile>

然后替换回任务。

<Copy SourceFiles="@(GitHookFiles)"
      DestinationFolder="@(OutputLines)" 
      OverwriteReadOnlyFiles="True"
/>

最后清理文件。

<Delete Files="$(OutputFile)" />