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