2

我正在使用cmdShake 并且无法形成以下命令行...

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 上运行它。

4

1 回答 1

1

我写了一个小 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"}

但是,假设 realmsbuild与其他 Visual Studio 工具(例如fsccsccl)一样,您可能可以使用以下等效(也许是首选)变体:

msbuild a.sln /p:Configuration=Debug "/p:Platform=Any CPU"

您可以用 Shake 表示:

cmd "msbuild a.sln /p:Configuration=Debug" ["/p:Platform=Any CPU"]
于 2014-07-26T19:57:34.450 回答