MSBuild Exec 命令总是失败

kik*_*iki 1 msbuild

我正在尝试从 MSBuild(VS2015,从文件)执行这个简单的命令.target来生成当前 git 提交的日期:

git show -s --format=%cd --date=format:%d.%m.%Y
Run Code Online (Sandbox Code Playgroud)

所以在 MSBuild 中我尝试过:

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

但它只会产生一个错误:

1>------ Build started: Project: example, Configuration: Release Dll Win32 ------
1>  fatal: invalid --pretty format: d.Y
1>D:\example\gitversion.targets(26,5): error MSB3073: The command "git show -s --format=%cd --date=format:%d.%m.%Y" exited with code 128.
Run Code Online (Sandbox Code Playgroud)

如果我将引号内的命令发布到控制台,它会像魅力一样工作并打印19.12.2016.

我尝试过以下操作:

  • 逃脱也=标志,,:...仍然不起作用

  • 仅使用Command="git show -s --format=%25ci"-> 也会产生错误fatal: invalid --pretty format: ci,但在控制台中工作正常。

  • 用引号引起来&quot;--format=%25ci&quot;-> 相同的错误

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

我怀疑它以某种方式不接受=指定参数,但 git 不会让我将它作为单独的参数传递,例如用空格分隔。

Mic*_*ker 6

你想%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>
Run Code Online (Sandbox Code Playgroud)

请参阅此处了解MSBuild 转义字符