MSBuild:如何将文件复制到由执行命令的输出确定的 DestinationFolder?
Posted
技术标签:
【中文标题】MSBuild:如何将文件复制到由执行命令的输出确定的 DestinationFolder?【英文标题】:MSBuild: How do I CopyFiles to DestinationFolder that is determined by output of executing a command? 【发布时间】: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"/>
【问题讨论】:
【参考方案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 > "$(OutputFile)"" />
然后从文本文件中读取值。
<ReadLinesFromFile File="$(OutputFile)">
<Output TaskParameter="Lines" ItemName="OutputLines"/>
</ReadLinesFromFile>
然后替换回任务。
<Copy SourceFiles="@(GitHookFiles)"
DestinationFolder="@(OutputLines)"
OverwriteReadOnlyFiles="True"
/>
最后清理文件。
<Delete Files="$(OutputFile)" />
【讨论】:
以上是关于MSBuild:如何将文件复制到由执行命令的输出确定的 DestinationFolder?的主要内容,如果未能解决你的问题,请参考以下文章
.Net-Core Proj - MSBuild 无法复制到输出文件夹
VS/MSBUILD:复制子项目的输出文件,不添加对exe的引用