【问题标题】:MSBuild: How do I CopyFiles to DestinationFolder that is determined by output of executing a command?MSBuild:如何将文件复制到由执行命令的输出确定的 DestinationFolder?
【发布时间】:2021-09-12 07:54:15
【问题描述】:

我需要将特定的 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"/>

【问题讨论】:

    标签: git msbuild githooks msbuild-task


    【解决方案1】:

    感谢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)" />
    

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 2014-03-27
      • 2021-02-28
      • 2011-04-26
      • 2014-05-15
      • 1970-01-01
      • 2022-08-13
      • 2016-04-28
      • 1970-01-01
      相关资源
      最近更新 更多