带参数的简单Powershell Msbuild失败

时间:2012-03-08 09:42:42

标签: 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

我在this帖子上尝试了解决方案,但我认为这是一个不同的错误。

2 个答案:

答案 0 :(得分:13)

尝试以下方法之一:

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/

答案 1 :(得分:1)

您需要在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