更新1:
再次在输出仔细观察之后,我有点理解了它。通过添加右括号和它的作品引号之间的尾随空格:
powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" "$(ProjectDir) " "$(TargetDir) "
我怀疑的PowerShell某种程度上解释)"
。
有没有解决这个问题,一个更优雅的方式?
更新2:
这很奇怪。我还有一个脚本,做了清理,并与出)
和"
这样的空间的工作原理:
powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersionCleanup.ps1" "$(ProjectDir)"
但是添加尾部的空格会导致失败,因为它的内部追加一个文件名添加到路径,使这条道路将是不正确的。
如果任何一个明白这一点,我会很乐意接受的解释,正确的答案!
原版的:
我在Visual Studio中,我想使用以将来自一个Git标签的版本以下预编译命令:
powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" $(ProjectDir) $(TargetDir)
这工作得很好,如果路径$(SolutionDir)不包含空格(然后将同样存在于$(PROJECTDIR)或$(TARGETDIR))。
当路径$(SolutionDir)不包含空格,它出现在脚本正常启动,但参数不正确传递,我无法弄清楚如何逃脱他们在争论的PS-脚本。
我已尝试加入唱“三联‘’”,并且还”,它给出以下的(每个PS-命令试图为逸出的空间不同的方法):
powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" $(ProjectDir) $(TargetDir)
ARGS [0]:
d:\ VisualStudio的
ARGS [1]:
项目\ software_git_repo \ ProgramEditor \
powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" "$(ProjectDir)" "$(TargetDir)"
BS:ARGS [0]:
d:\ Visual Studio项目\ software_git_repo \ ProgramEditor” d:\ Visual Studio中
BS:ARGS [1]:
项目\ software_git_repo \ ProgramEditor \ BIN \调试”
powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" """$(ProjectDir)""" """$(TargetDir)"""
BS:ARGS [0]:
“d:\ VisualStudio的
BS:ARGS [1]:
项目\ software_git_repo \ ProgramEditor”
powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" '$(ProjectDir)' '$(TargetDir)'
BS:ARGS [0]:
“d:\ VisualStudio的
BS:ARGS [1]:
项目\ software_git_repo \ ProgramEditor \”
这样做:
echo ProjectDir:
echo $(ProjectDir)
echo TargetDir:
echo $(TargetDir)
我得到:
PROJECTDIR:
d:\ VisualStudio的项目\ software_git_repo \ ProgramEditor \
TARGETDIR:
d:\ VisualStudio的项目\ software_git_repo \ ProgramEditor \ BIN \调试\