我正在尝试传递一个简单的变量传递,
无参数
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帖子上尝试了解决方案,但我认为这是一个不同的错误。
答案 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