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 > "$(OutputFile)"" />
然后从文本文件中读取值。
<ReadLinesFromFile File="$(OutputFile)">
<Output TaskParameter="Lines" ItemName="OutputLines"/>
</ReadLinesFromFile>
然后替换回任务。
<Copy SourceFiles="@(GitHookFiles)"
DestinationFolder="@(OutputLines)"
OverwriteReadOnlyFiles="True"
/>
最后清理文件。
<Delete Files="$(OutputFile)" />
我需要将特定的 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 > "$(OutputFile)"" />
然后从文本文件中读取值。
<ReadLinesFromFile File="$(OutputFile)">
<Output TaskParameter="Lines" ItemName="OutputLines"/>
</ReadLinesFromFile>
然后替换回任务。
<Copy SourceFiles="@(GitHookFiles)"
DestinationFolder="@(OutputLines)"
OverwriteReadOnlyFiles="True"
/>
最后清理文件。
<Delete Files="$(OutputFile)" />