MSBuild Exec命令始终失败

MSBuild Exec命令始终失败,msbuild,Msbuild,我正试图从MSBuild(VS2015,来自.target文件)执行此简单命令,以生成当前git提交的日期: git show -s --format=%cd --date=format:%d.%m.%Y 因此,在MSBuild中,我尝试了: <Exec Command="git show -s --format=%25cd --date=format:%25d.%25m.%25Y" ConsoleToMSBuild="true"> <Output TaskParame

我正试图从MSBuild(VS2015,来自
.target
文件)执行此简单命令,以生成当前git提交的日期:

git show -s --format=%cd --date=format:%d.%m.%Y
因此,在MSBuild中,我尝试了:

<Exec Command="git show -s --format=%25cd --date=format:%25d.%25m.%25Y"  ConsoleToMSBuild="true">
  <Output TaskParameter="ConsoleOutput" PropertyName="BuildDate" />
</Exec>
如果我将引号内的命令发布到控制台,它会像符咒一样工作并打印
19.12.2016

我试过以下几件事:

  • 也要转义
    =
    符号,
    。。。还是不行

  • 仅使用
    Command=“git show-s--format=%25ci”
    ->还会产生一个错误
    致命:无效--pretty format:ci
    ,但在控制台中可以正常工作

  • 用引号括起来--format=%25ci“->相同错误

  • 使用
    Command=“git--version”
    调用,这将按预期工作并返回git版本(与控制台上相同)


我怀疑它在某种程度上不接受指定参数的
=
,但git不允许我将其作为单独的参数传递,例如用空格分隔。

您希望
%25
转义
%
,因此您的命令变为

<Exec Command="git show -s --format=%25%25cd --date=format:%25%25d.%25%25m.%25%25Y" ConsoleToMSBuild="true">
  <Output TaskParameter="ConsoleOutput" PropertyName="BuildDate" />
</Exec>


请参见此处,了解您希望
%25
转义
%
,以便您的命令变为

<Exec Command="git show -s --format=%25%25cd --date=format:%25%25d.%25%25m.%25%25Y" ConsoleToMSBuild="true">
  <Output TaskParameter="ConsoleOutput" PropertyName="BuildDate" />
</Exec>


另一个答案帮助了我,但我有一个稍微复杂一点的场景。以下是我自己的解决方案,并添加了一些解释:


这将执行以下命令:

git log -1 --oneline --pretty='%h %ad <%ae>' > bin/debug/git-info.txt
git日志-1--oneline--pretty='%h%ad'>bin/debug/git-info.txt
以下是我对为什么需要每次逃跑的理解:

  • %25
    %
    符号的首字母
  • %25%25
    然后将创建两个百分比符号,这是
  • 是双引号的缩写
  • 字符的

另一个答案对我很有帮助,但我有一个稍微复杂一点的场景。下面是我自己的解决方案,还有一些补充说明:


这将执行以下命令:

git log -1 --oneline --pretty='%h %ad <%ae>' > bin/debug/git-info.txt
git日志-1--oneline--pretty='%h%ad'>bin/debug/git-info.txt
以下是我对为什么需要每次逃跑的理解:

  • %25
    %
    符号的首字母
  • %25%25
    然后将创建两个百分比符号,这是
  • 是双引号的缩写
  • 字符的

这对我来说仍然没有意义,为什么我需要逃避两次,但它像一个符咒一样有效。这对我来说仍然没有意义,为什么我需要逃避两次,但它像一个符咒一样有效。