Простой 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

Я попробовал решение в этом посте, но я думаю, что это другая ошибка.

2 ответа

Решение

Попробуйте один из них:

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/

Вы должны поместить пробел где-то между 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
Другие вопросы по тегам