Pergunta

Estou tentando ligar para o msbuild de uma linha de comando. Tudo estava funcionando bem quando eu estava usando um caminho que não tinha espaços, mas agora tenho um caminho com espaços e o comando está falhando.

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

Em seguida, adicionei citações e mudei para fora para fora (não 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

O que estou buscando é algo assim (não funciona):

"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

Alguma ajuda na sintaxe em torno do Over/Outpath e WebProjectOutputDir com espaços? É possível? Se não é ninguém sabe qual é o motivo (devido a alguns URLs não terão o tipo de espaços?)

Foi útil?

Solução

Acabei de descobrir isso uma resposta para essa antiga pergunta. Para lidar com espaços, você deve usar o caractere de fuga em todas as pastas. Basicamente

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

deveria estar

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

E magicamente funciona!

Outras dicas

Tente adicionar "ex:

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

O MSBuild também parece funcionar com espaços no Outs Out se você mudar para /, enquanto estiver usando aspas:

/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

Tente isso.

Experimente também via vsstudio gui. Em seguida, copie as configurações e tente com o MS Build.

Para mim, a solução de trabalho é:

/P: SQLCMD = "" C: Arquivos de Programas Microsoft SQL Server 100 Tools Binn sqlcmd.exe ""

Em outras palavras: colocar toda a string em cotações (as cotações externas não são passadas como valor para o msbuild).

O valor dentro do msbuild para esta propriedade é: "C: Arquivos de programas Microsoft SQL Server 100 Tools Binn sqlcmd.exe" (com as cotações).

Se você tiver vários parâmetros em um comutador, não pode realmente 'evitar' o problema corrigindo o caminho. O que você pode fazer é colocar seus parâmetros da mudança entre "Some_Parameters1 Some_Parameters2".

Algo como:

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

É claro que depende muito da sintaxe dos interruptores, mas isso funciona para mim e para minha equipe.

Para fazer isso ao usar um arquivo .proj e seu caminho está incluído em propriedades como $ (implantinger) e $ (nugetexe), você pode usar "" "como este:

<Exec Command="&quot;$(NuGetExe)&quot; pack -OutputDirectory &quot;$(DeployFolder)&quot;" />
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top