2009-06-29 7 views
20

Estoy tratando de llamar a MSBuild desde una línea de comando. Todo estaba funcionando bien cuando estaba usando una ruta que no tenía espacios, pero ahora tengo una ruta que tiene espacios y el comando está fallando.¿Cómo tengo espacios en un MSBuild WebProjectOutputDir?

Comando (obras):

"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 

Luego añade cotizaciones y cambió a OutDir OUTPATH ​​(no funciona):

"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 

Lo que mi objetivo es algo como esto (doesn 't trabajo):

"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 

Cualquier ayuda sobre la sintaxis alrededor OutDir/OUTPATH ​​y WebProjectOutputDir con espacios? ¿Es posible? Si no lo está, ¿alguien sabe cuál es la razón (debido a no tener cosa de tipo de espacios de alguna URL?)

Respuesta

20

Acabo de encontrar una respuesta a esta pregunta anterior. Para manejar espacios, debe usar el carácter de escape \ en todas las carpetas. Básicamente

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

debería ser

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

y mágicamente funciona!

+0

Excelente! Parece que MSBuild tiene una forma personalizada de interpretar la línea de comandos. Gracias por publicar su resultado. – jpierson

+4

Entonces, ¿cómo haces esto cuando estás usando macros como $ (ProjectDir)? – Mateo

+2

@Mateo puede utilizar lo siguiente: '/ 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 

probar esto.

También intente a través de VSStudio GUI. Luego copie la configuración & intente con MS Build.

+0

por desgracia que no funciona – ChrisHDog

4

MSBUILD también parece funcionar con espacios en el OutDir si cambia \ a /, mientras que el uso de citas:

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

Funciona con '/ p: AspnetMergePath =" C:/Archivos de programa (x86)/Microsoft SDKs/Windows/v8.0A/bin/NETFX 4.0 Tools/"' también, me acabo de enterar. Las barras invertidas fallaron. –

5

Trate de añadir " ejemplo:

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

Puede formatear como código usando 'ctrl + k', o el botón' {} 'encima de la ventana del editor. – stema

+0

La única solución de trabajo que encontré, que funciona con macros VS – Illidan

1

Para mí la solución de trabajo es:

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

En otras palabras: poner toda la cadena entre comillas (las comillas externas no se pasan como valor a MSBuild).

El valor dentro de MSBuild para esta propiedad es: "C: \ Archivos de programa \ Microsoft SQL Server \ 100 \ Tools \ Binn \ SQLCMD.EXE" (con las comillas).

1

Si tiene múltiples parámetros en un interruptor, no puede 'evitar' el problema al arreglar la ruta. Lo que puede hacer es poner sus parámetros del interruptor entre " algunos_parámetros1 algunos_parametros2 ".

Algo así como:

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

Por supuesto, mucho depende de la sintaxis de los interruptores, pero que funciona para mí y para mi equipo.

+0

Eso debería haber estado en "Algo como" arriba. –

0

Para hacer esto al usar un archivo .proj y su ruta está incluida en propiedades como $ (DeployFolder) y $ (NuGetExe), puede usar "& quot;" de esta manera:

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