2009-06-29 10 views
20

Sto provando a chiamare MSBuild da una riga di comando. Tutto stava funzionando bene quando stavo usando un percorso che non aveva spazi, ma ora ho un percorso che ha spazi e il comando sta fallendo.Come posso avere spazi in un WebProjectOutputDir di MSBuild?

Command (opere):

"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 

Ho poi aggiunto citazioni e cambiato OutDir a OUTPATH ​​(non funziona):

"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 

Quello che sto puntando è qualcosa di simile (doesn 't lavoro):

"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 

Qualsiasi aiuto sulla sintassi intorno OutDir/OUTPATH ​​e WebProjectOutputDir con spazi? È possibile? Se non è qualcuno sa quale sia la ragione (a causa di non avere spazi cosa tipo un po 'di URL?)

risposta

20

Ho appena trovato questa risposta a questa vecchia domanda. Per gestire gli spazi, è necessario utilizzare il carattere di escape \ su tutte le cartelle. Fondamentalmente

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

dovrebbe essere

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

e magicamente funziona!

+0

Eccellente! Sembra che MSBuild abbia un modo originale e divertente di interpretare la riga di comando. Grazie per aver pubblicato il tuo risultato. – jpierson

+4

Quindi, come si fa quando si utilizzano macro come $ (ProjectDir)? – Mateo

+2

@Mateo è possibile utilizzare quanto segue: '/ 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 

Prova questa.

Prova anche tramite VSStudio GUI. Quindi copiare le impostazioni & provare con MS Build.

+0

sfortunatamente non funziona – ChrisHDog

4

MSBuild sembra anche a lavorare con spazi nel OutDir se si passa \ a /, durante l'utilizzo di citazioni:

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

Funziona con '/ p: AspnetMergePath =" C:/Programmi (x86)/Microsoft SDK/Windows/v8.0A/bin/NETFX 4.0 Strumenti/"anche io ho appena scoperto. Backslash falliti. –

5

Cercate aggiungere " es:

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

Puoi formattare come codice usando 'ctrl + k', o il pulsante' {} 'sopra la finestra dell'editor. – stema

+0

L'unica soluzione funzionante che ho trovato, che funziona con macro VS – Illidan

1

Per me la soluzione di lavoro è:

/p: SQLCMD = "\" C: \ Programmi \ Microsoft SQL Server \ 100 \ Tools \ Binn \ sqlcmd.exe \ ""

In altre parole: Mettere tutta la stringa tra virgolette (le virgolette esterne non vengono passate come valore a MSBuild).

Il valore all'interno di MSBuild per questa proprietà è: "C: \ Programmi \ Microsoft SQL Server \ 100 \ Tools \ Binn \ SQLCMD.EXE" (con le virgolette).

1

Se si dispone di più parametri in uno switch, non è possibile "evitare" il problema risolvendo il percorso. Quello che puoi fare è inserire i parametri dell'interruttore tra " some_parameters1 some_parameters2 ".

Qualcosa di simile:

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

Naturalmente molto dipende della sintassi degli interruttori, ma che funziona per me e la mia squadra.

+0

Che avrebbe dovuto essere in "Qualcosa di simile" sopra. –

0

Per fare ciò quando si utilizza un file .proj e il percorso è incluso in proprietà come $ (DeployFolder) e $ (NuGetExe), è possibile utilizzare "& quot;" così:

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