Как вывести /p:Platform=Any CPU, как указано в Shake cmd?

Я использую 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.


person philderbeast    schedule 26.07.2014    source источник
comment
Я думаю, вы должны иметь возможность передать вместо этого "/p:Platform=Any CPU", и msbuild должно работать эквивалентно. Я подозреваю, что для передачи именно этой строки в msbuild вам нужно Shell в первый вариант, но позже я проверю правильно.   -  person Neil Mitchell    schedule 26.07.2014


Ответы (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"}

Однако, предполагая, что реальный 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"]
person Neil Mitchell    schedule 26.07.2014