2012-03-08 13 views
6

próbuję przekazać prostą zmienną mijania,Proste PowerShell MSBuild z parametrem nie

żaden parametr

msbuild MySolution.sln /p:Configuration=Debug /p:Platform="Any CPU" 

Spróbuj 1

$buildOptions = '/p:Configuration=Debug /p:Platform="Any CPU"' 
msbuild MySolution.sln + $buildOptions 

-> powodować MSB1008

Try 2

$command = "msbuild MySolution.sln" + $buildOptions 
Invoke-expression $command 

-> przyczyna MSB1009

Próbowałem rozwiązanie na this postu, ale myślę, że to jest inny błąd.

Odpowiedz

12

Wypróbuj jedno z nich:

msbuild MySolution.sln $buildOptions 

Start-Process msbuild -ArgumentList MySolution.sln,$buildOptions -NoNewWindow 

Nawiasem mówiąc, jest to nowa funkcja w PowerShell v3 tylko dla tego rodzaju sytuacjach, wszystko po -% traktowana jest jak jest, więc będzie komenda jesteś wyglądać następująco:

msbuild MySolution.sln --% /p:Configuration=Debug /p:Platform="Any CPU" 

Zobacz ten post, aby uzyskać więcej informacji: http://rkeithhill.wordpress.com/2012/01/02/powershell-v3-ctp2-provides-better-argument-passing-to-exes/

+0

+1 za -% w Powershell v3 –

1

Musisz umieścić przestrzeń gdzieś pomiędzy MySolution.sln i listę parametrów. Jak masz to, wyniki wiersza poleceń w

msbuild MySolution.sln/p:Configuration=Debug /p:Platform="Any CPU" 

I MSBuild rozważy „MySolution.sln/p: konfiguracja = Debug”, aby być nazwa pliku projektu/roztwór, co skutkuje MSB10009: Project file does not exist..

Trzeba się upewnić, że uzyskany z linii poleceń jest mniej więcej tak (uwaga przestrzeń po MySolution.sln:

msbuild MySolution.sln /p:Configuration=Debug /p:Platform="Any CPU"  

Istnieje wiele sposobów, aby upewnić się, że używając składni PowerShell, jeden z nich to:

$buildOptions = '/p:Configuration=Debug /p:Platform="Any CPU"' 
    $command = "msbuild MySolution.sln " + $buildOptions # note the space before the closing quote. 

    Invoke-Expression $command