Como tenho espaços em um msbuild webprojectutputdir?
-
20-08-2019 - |
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?)
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="value1:blabla1 | value2:blabla2""/>
É 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=""$(NuGetExe)" pack -OutputDirectory "$(DeployFolder)"" />