2009-06-29 8 views
20

Próbuję wywołać MSBuild z wiersza polecenia. Wszystko działało dobrze, gdy używałem ścieżki, która nie ma spacji, ale teraz mam ścieżkę, która ma spacje i polecenie się nie udaje.Jak mam spacje w MSBuild WebProjectOutputDir?

Command (prace):

"C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
/t:Rebuild "C:\Projects\myProject.csproj" 
/p:OutDir=c:\temp\deploy\funAndGames\Deployment\bin\ 
/p:WebProjectOutputDir=c:\temp\deploy\funAndGames\Deployment\ 
/p:Configuration=Release 

I dodaje cytaty i zmienił OUTDIR do OutPath (nie działa):

"C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
/t:Rebuild "C:\Projects\myProject.csproj" 
/p:OutPath="c:\temp\deploy\funAndGames\Deployment\bin\" 
/p:WebProjectOutputDir="c:\temp\deploy\funAndGames\Deployment\" 
/p:Configuration=Release 

Co mam nastawione na coś takiego (robi „praca t):

"C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
/t:Rebuild "C:\Projects\myProject.csproj" 
/p:OutPath="c:\temp\deploy\fun and games\Deployment\bin\" 
/p:WebProjectOutputDir="c:\temp\deploy\fun and games\Deployment\" 
/p:Configuration=Release 

Każda pomoc na składni wokół oUTDIR/OutPath i WebProjectOutputDir ze spacjami? Czy to możliwe? Jeśli tak nie jest, to nikt nie wie, jaka jest przyczyna (z powodu braku adresu URL w nazwie adresu URL?)

Odpowiedz

20

Właśnie znalazłem odpowiedź na to stare pytanie. Aby obsłużyć spacje, należy użyć znaku escape \ we wszystkich folderach. Zasadniczo

/p:OutPath="c:\temp\deploy\fun and games\Deployment\bin\" 

powinny być

/p:OutPath="c:\\temp\\deploy\\fun and games\\Deployment\\bin\\" 

i magicznie to działa!

+0

Świetnie! Wygląda na to, że MSBuild ma jakiś niestandardowy sposób interpretowania wiersza poleceń. Dziękujemy za opublikowanie Twojego wyniku. – jpierson

+4

Jak to zrobić, gdy używasz makr, takich jak $ (ProjectDir)? – Mateo

+2

@Mateo można użyć następującego: '/ p: ProjectDir = " $ (ProjectDir.Replace ('\', '\\')) "' – Stijn

1
> "C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
> /t:Rebuild 
> "C:\Projects\myProject.csproj" 
/p:OutPath="c:\temp\deploy\funAndGames\Deployment\bin\" 
---------------------------------------- 
/p:WebProjectOutputDir="c:\temp\deploy\fun and games\Deployment\" 
---------------------------------------- 

> /p:Configuration=Release 

Spróbuj tego.

Spróbuj także za pośrednictwem interfejsu graficznego VSStudio. Następnie skopiuj ustawienia przy użyciu MS Build.

+0

Niestety to nie działa – ChrisHDog

4

MSBuild wydaje również pracować ze spacjami w OUTDIR jeśli przełącznik \ na /, natomiast za pomocą cytatów:

/p:OutDir="c:/temp/deploy/fun and games/out/" 
/p:WebProjectOutputDir="c:/temp/deploy/fun and games/Deployment/" 
+0

Działa z '/ p: AspnetMergePath =" C:/Program Files (x86)/Microsoft SDK/Windows/v8.0A/bin/NETFX 4.0 Tools/"' również, właśnie się dowiedziałem. Backslawy nie powiodły się. –

5

Spróbuj dodać " Ex:

/p:OutPath=""c:\temp\deploy\fun and games\Deployment\bin\"" 
+0

Można sformatować jako kod za pomocą 'ctrl + k' lub przycisku' {} 'nad oknem edytora. – stema

+0

Jedyne działające rozwiązanie, które znalazłem, które działa z makrami VS – Illidan

1

Dla mnie roztworu roboczego jest:

/p: SQLCMD = "\" C: \ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \ SQLCMD.EXE \ ""

Innymi słowy: Umieszczanie całego ciągu znaków w cudzysłowach (cudzysłowy zewnętrzne nie są przekazywane do MSBuild jako wartość).

Wartość wewnątrz MSBuild dla tej właściwości to: "C: \ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \ SQLCMD.EXE" (z cytatami).

1

Jeśli masz wiele parametrów w przełączniku, naprawdę nie możesz "uniknąć" problemu, poprawiając ścieżkę. Możesz ustawić parametry przełącznika między " some_parameters1 some_parameters2 ".

Coś jak:

<Exec Command="SomeCommand /useMultipleParameterSwitch=&quot;value1:blabla1 | value2:blabla2&quot;"/> 

Oczywiście wiele zależy od składni przełączników ale że pracuje dla mnie i mojego zespołu.

+0

To powinno być w "Coś jak" powyżej. –

0

Aby to zrobić, korzystając z pliku .proj, a ścieżka jest zawarta we właściwościach takich jak $ (DeployFolder) i $ (NuGetExe), można użyć wartości "& quot;" tak:

<Exec Command="&quot;$(NuGetExe)&quot; pack -OutputDirectory &quot;$(DeployFolder)&quot;" />