从msysgit bash提示下执行msbuild时,我已经遇到了一些9009个错误的目标,这些目标在路径中具有命令。通过将echo $(Path)
的执行添加到失败的目标中,很明显MSBuild无法再解释该路径。
由于MSBuild是从MSYSGIT BASH SHELL启动的,因此它具有BASH式$PATH
变量(例如/c/Directory1:/c/Directory2
),但似乎它试图将值解释为DOS型%PATH%
(例如c:Directory1;c:Directory2
)。显然,这失败了。
是否有一种优雅的方法来纠正这种行为?我想我可以做一个可以转换路径并将其注入-p:Path="..."
的别名,但是我认为值得一提的是,在我开始之前是否有更干净的方式。
事实证明有一个容易的答案:只是使用~
的路径中没有任何东西,而MSBuild在SHSTYLE路径上做得很好。
脚本完成了不太丑陋的路径修复的脚本,除了路径的弹跳:
#/bin/sh
dospath=`echo ${PATH} |
sed "s-(^|:)~([/:]|$)-1${HOME}2-g" |
sed 's-:-;-g' |
sed 's-(^|;)/([A-Za-z])([/;]|$)-12:3-g' |
sed 's-/-\\-g'`
msbuild=`which msbuild.exe`
whichresult=$?
if [ ${whichresult} -eq 0 ]; then
PATH=${dospath}
${msbuild} $@
else
echo 'msbuild.exe not found'
exit ${whichresult}
fi