我正在尝试为我的ASP.NET应用程序创建一个Rakefile。这是mstest.exe文件的路径:
mstest = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"
这是我拥有的Rakefile的一部分:
task :default do
mstest = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"
sh "#{mstest_file} "#{testdll_file} "
end
我得到此错误:
rake中止了! Albacore :: CommandnotFoundError:命令失败,状态(127) - 编号127特别是指操作系统找不到可执行文件:
c:/program Files(x86)/Microsoft Visual Studio 12.0/common7/inde/mstest.exe
我认为路径中的空间会导致错误:"程序文件(86X)/Visual Studio ...",因为如果路径中没有空间,则Rakefile可以正常工作。
我已经尝试了这些事情,但还没有成功的结果:
-
mstest = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"
-
mstest = "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"
-
mstest = "C:/Programs Filess (x86)/Microsofts Visuals Studio 12.0/Common7/IDE/mstest.exe"
-
mstest = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\mstest.exe"
- 将mstest和#{mstest}放入这两个引号,双引号和组合中。
我该如何修复?
问题是您使用的是带有逃逸空间的双引号,而不是单引号。考虑以下内容:
"foo bar" # => "foo bar"
'foo bar' # => "foo\ bar"
或:
"C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"
# => "C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe"
'C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe'
# => "C:/Program Files\ (x86)/Microsoft\ Visual\ Studio\ 12.0/Common7/IDE/mstest.exe"
请注意,第一个使用双重报价是如何使用字面字符说的。当解释器遇到" "
时。使用单价,这是"使用BackSlash",然后是一个空间&quot,您要使用它,因为您希望Backslash在通过字符串时传播到OS。
确实,您可能应该考虑使用Ruby的内置ShellWords类:
操纵字符串,例如Unix Bourne Shell
此模块根据Unix Bourne Shell的解析规则来操纵字符串。
特别是查看shellescape
:
逃脱了一个字符串,以便可以在Bourne Shell命令行中安全使用。
考虑一下:
require 'shellwords'
'C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe'
# => "C:/Program Files\ (x86)/Microsoft\ Visual\ Studio\ 12.0/Common7/IDE/mstest.exe"
Shellwords.escape("C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/mstest.exe")
# => "C:/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio\ 12.0/Common7/IDE/mstest.exe"
注意shellescape
如何逃脱了括号。