Come posso avere spazi in un WebProjectOutputDir di MSBuild?
-
20-08-2019 - |
Domanda
Sto provando a chiamare MSBuild da una riga di comando. Tutto funzionava bene quando stavo usando un percorso senza spazi, ma ora ho un percorso che ha spazi e il comando non riesce.
Comando (funziona):
"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 quindi aggiunto le virgolette e modificato OutDir in 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 a cui sto puntando è qualcosa del genere (non funziona):
"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
Qualche aiuto sulla sintassi di OutDir / OutPath e WebProjectOutputDir con spazi? È possibile? In caso contrario, qualcuno sa qual è il motivo (a causa del fatto che alcuni URL non hanno spazi di tipo?)
Soluzione
Ho appena trovato una 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!
Altri suggerimenti
Prova ad aggiungere "
es:
/p:OutPath=""c:\temp\deploy\fun and games\Deployment\bin\""
Msbuild sembra funzionare anche con spazi in OutDir se passi \ a /, mentre usi le virgolette:
/p:OutDir="c:/temp/deploy/fun and games/out/"
/p:WebProjectOutputDir="c:/temp/deploy/fun and games/Deployment/"
> "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 questo.
Prova anche tramite la GUI di VSStudio. Quindi copia le impostazioni & Amp; prova con MS Build.
Per me la soluzione di lavoro è:
/ p: SQLCMD = " \ " C: \ Programmi \ Microsoft SQL Server \ 100 \ Tools \ Binn \ SQLCMD.EXE \ " "
In altre parole: mettere tutte le stringhe 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).
Se in uno switch sono presenti più parametri, non è possibile "evitare" il problema risolvendo il percorso. Quello che puoi fare è mettere i tuoi parametri dello switch tra & Quot; some_parameters1 some_parameters2 " ;.
Qualcosa del tipo:
<Exec Command="SomeCommand /useMultipleParameterSwitch="value1:blabla1 | value2:blabla2""/>
Ovviamente molto dipende dalla sintassi degli switch, ma questo funziona per me e il mio team.
Per fare ciò quando si utilizza un file .proj e il percorso è incluso in proprietà come $ (DeployFolder) e $ (NuGetExe), è possibile utilizzare " & amp; quot; " in questo modo:
<Exec Command=""$(NuGetExe)" pack -OutputDirectory "$(DeployFolder)"" />