【发布时间】:2020-09-11 08:20:03
【问题描述】:
我必须使用 git 命令来获取提交哈希。我找到了几种方法,但似乎不起作用。如果我使用 powershell 脚本,我可以使用$env:Path += ";C:\Program Files (x86)\Git\bin" 导入 git.exe,这会容易得多。事实是我不想使用外部脚本(例如 powershell 脚本)或导入任何东西。有没有办法只使用 msbuild 来做到这一点?
我尝试过使用:
<Exec Command="git describe --long --always" ConsoleToMSBuild="true" />
错误 MSB3073:命令“git describe --long --always”以代码 9009 退出。
和
<Exec Command="$env:Path += ';C:\Program Files (x86)\Git\bin'; git describe --long --always" ConsoleToMSBuild="true" />
错误 MSB3073:命令 "$env:Path += ';C:\Program Files (x86)\Git\bin'" 退出,代码为 123
编辑
我不知道为什么 powershell 上有问题:s
更新
现在我正在使用以下行:
<Exec WorkingDirectory="$(MSBuildProjectDirectory)" Command="& 'C:\Program Files (x86)\Git\bin\git.exe' describe --long --always" ConsoleToMSBuild="true" />
引发错误: 错误 MSB3073:命令 "& '(...)' describe --long --always" 以代码 255 退出。。
【问题讨论】:
-
您是否尝试过使用 git exe 的完整路径 (
Command="C:\Program Files (x86)\Git\bin\git describe --long --always"? -
它抛出 error MSB3073: The command "C:\Program Files (x86)\Git\bin\git describe --long --always" exited with code 9009 (我也试过 git .exe 完整路径)
-
如果您在 msbuild 之外运行这些命令,它们是否有效? 9009 错误级别表示未找到命令/文件。 123 表示有一个未指定的错误 - 可能是解析或类似的东西。
-
是的,我很确定它们可以工作。实际上,为了进行测试,我只是复制了错误(打印了我要执行的行),然后将其粘贴到 powershell 中,它就可以工作了。我在 google 中发现,当您从完整路径执行 .exe 时,您应该在开始时使用 '&',然后整行将是:"& 'C:\Program Files (x86)\Git\bin\ git.exe' 描述 --long --always"。现在它打印 exited with code 255。我不知道这意味着什么,但我很确定它与工作目录有关(如果您尝试在本地存储库之外运行该代码,则会引发错误)。
-
git describe命令应该总是成功并在标准输出上返回一些东西。因此,问题可能出在其他地方。我会尝试单独运行它,但尽可能接近你在 csproj 中的内容。我还会问自己一个非常重要的问题:我真的需要这样做吗?从您所展示的内容来看,没有使用输出 - 那么投入时间和精力让它工作有什么意义?
标签: git powershell msbuild csproj