更新1:
再次仔细查看输出后,我有点明白了。通过在右括号和引号之间添加尾随空格,它可以工作:
powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" "$(ProjectDir) " "$(TargetDir) "
Run Code Online (Sandbox Code Playgroud)
我怀疑 PowerShell 以某种方式解释了)".
有没有更优雅的方法来解决这个问题?
更新2:
这很奇怪。我有另一个脚本可以进行清理并在)和之间没有空格的情况下工作",如下所示:
powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersionCleanup.ps1" "$(ProjectDir)"
Run Code Online (Sandbox Code Playgroud)
但是添加尾随空格将导致它失败,因为它在内部将文件名附加到路径,因此路径将不正确。
如果有人理解这一点,我很乐意接受该解释作为正确答案!
原来的:
我在 VisualStudio 中有以下预构建命令,我想用它从 Git 标签注入版本:
powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" $(ProjectDir) $(TargetDir)
Run Code Online (Sandbox Code Playgroud)
如果路径 $(SolutionDir) 不包含空格(该路径也将出现在 $(ProjectDir) 或 $(TargetDir) 中),则此方法可以正常工作。
当路径 $(SolutionDir) 确实包含空格时,脚本似乎按预期启动,但参数未正确传递,我无法弄清楚如何在 PS 脚本的参数中转义它们。
我尝试添加 sing "、三重 """ 以及 ',这给出了以下内容(每个 PS 命令尝试不同的方法来转义空格):
powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" $(ProjectDir) $(TargetDir)
Run Code Online (Sandbox Code Playgroud)
参数[0]:
D:\VisualStudio
参数[1]:
项目\software_git_repo\ProgramEditor\
powershell -ExecutionPolicy ByPass -File …Run Code Online (Sandbox Code Playgroud)