我正在使用cmd
来自 Shake 并在形成以下命令行时遇到问题...
msbuild a.sln /p:Configuration=Debug /p:Platform="Any CPU"
当我尝试转义双引号时,转义和字符串引用流得太远并出现此错误...
Development.Shake.cmd, system command failed
Command: msbuild a.sln /p:Configuration=Debug "/p:Platform=\"Any CPU\""
Exit code: 1
我尝试了3种方法...
cmd "msbuild a.sln /p:Configuration=Debug /p:Platform=\"Any CPU\""
cmd "msbuild a.sln /p:Configuration=Debug" ["/p:Platform=\"Any CPU\""]
cmd "msbuild" ["a.sln", "/p:Configuration=Debug", "/p:Platform=\"Any CPU\""]
我在 Windows 上运行它。
最佳答案
我编写了一个小 C 程序(我将其命名为 msbuild
)来测试:
#include <Windows.h>
#include <stdio.h>
main()
{
printf("{%s}\n", GetCommandLine());
return 0;
}
用它来测试你的变体:
cmd "msbuild a.sln /p:Configuration=Debug /p:Platform=\"Any CPU\""
{"msbuild" "a.sln" "/p:Configuration=Debug" "/p:Platform=\"Any" "CPU\""}
cmd "msbuild a.sln /p:Configuration=Debug" ["/p:Platform=\"Any CPU\""]
{"msbuild" "a.sln" "/p:Configuration=Debug" "/p:Platform=\"Any CPU\""}
cmd "msbuild" ["a.sln", "/p:Configuration=Debug", "/p:Platform=\"Any CPU\""]
{"msbuild" "a.sln" "/p:Configuration=Debug" "/p:Platform=\"Any CPU\""}
解决这个问题的方法是使用 Shell
命令,告诉 Shake 避免进行任何自己的转义:
cmd Shell "msbuild a.sln /p:Configuration=Debug /p:Platform=\"Any CPU\""
{msbuild a.sln /p:Configuration=Debug /p:Platform="Any CPU"}
但是,假设真正的 msbuild
与其他 Visual Studio 工具(例如 fsc
、csc
、cl
>),您可能可以使用以下等效(也许是首选)变体:
msbuild a.sln /p:Configuration=Debug "/p:Platform=Any CPU"
用 Shake 可以表示为:
cmd "msbuild a.sln /p:Configuration=Debug" ["/p:Platform=Any CPU"]
关于haskell - 如何输出/p :Platform ="Any CPU" as quoted from shake cmd?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24967238/