Simple Powershell Msbuild с параметром не работает
Я пытаюсь передать простую переменную,
Нет параметров
msbuild MySolution.sln /p:Configuration=Debug /p:Platform="Any CPU"
Попробуйте 1
$buildOptions = '/p:Configuration=Debug /p:Platform="Any CPU"'
msbuild MySolution.sln + $buildOptions
- > вызывать MSB1008
Попробуйте 2
$command = "msbuild MySolution.sln" + $buildOptions
Invoke-expression $command
- > вызывать MSB1009
Я попробовал решение на этом, но я думаю, что это другая ошибка.
Ответы
Ответ 1
Попробуйте выполнить одно из следующих действий:
msbuild MySolution.sln $buildOptions
Start-Process msbuild -ArgumentList MySolution.sln,$buildOptions -NoNewWindow
Кстати, в PowerShell v3 появилась новая функция только для таких ситуаций, все после -% обрабатывается как есть, поэтому вы будете выглядеть так:
msbuild MySolution.sln --% /p:Configuration=Debug /p:Platform="Any CPU"
См. это сообщение для получения дополнительной информации:
http://rkeithhill.wordpress.com/2012/01/02/powershell-v3-ctp2-provides-better-argument-passing-to-exes/
Ответ 2
Вам нужно разместить пробел между MySolution.sln
и списком параметров. Как и у вас, в командной строке появляется
msbuild MySolution.sln/p:Configuration=Debug /p:Platform="Any CPU"
И MSBuild рассмотрит "MySolution.sln/p: Configuration = Debug" как имя файла проекта/решения, что приведет к MSB10009: Project file does not exist.
.
Вам нужно убедиться, что результирующая строка командной строки примерно такая (обратите внимание на пробел после MySolution.sln
:
msbuild MySolution.sln /p:Configuration=Debug /p:Platform="Any CPU"
Существует множество способов гарантировать использование синтаксиса Powershell, один из которых:
$buildOptions = '/p:Configuration=Debug /p:Platform="Any CPU"'
$command = "msbuild MySolution.sln " + $buildOptions # note the space before the closing quote.
Invoke-Expression $command