Как получить пробелы в MSBuild WebProjectOutputDir?

Я пытаюсь вызвать MSBuild из командной строки. Все работало нормально, когда я использовал путь без пробелов, но теперь у меня есть путь с пробелами, и команда не работает.

Команда (работает):

"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

Затем я добавил кавычки и изменил OutDir на OutPath (не работает):

"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

Я стремлюсь к чему-то вроде этого (не работает):

"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

Любая помощь по синтаксису вокруг OutDir/OutPath и WebProjectOutputDir с пробелами? Является ли это возможным? Если это не так, кто-нибудь знает, в чем причина (из-за того, что у некоторых URL нет пробелов?)


person ChrisHDog    schedule 29.06.2009    source источник


Ответы (7)


Только что нашел ответ на этот старый вопрос. Чтобы обрабатывать пробелы, вы должны использовать escape-символ \ во всех папках. В принципе

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

должно быть

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

и волшебным образом это работает!

person johnofcross    schedule 03.11.2009
comment
Превосходно! Похоже, у MSBuild есть какой-то необычный способ интерпретации командной строки. Спасибо, что опубликовали свой результат. - person jpierson; 17.09.2010
comment
Итак, как вы это делаете, когда используете макросы, такие как $(ProjectDir)? - person Mateo; 01.06.2012
comment
@Mateo, вы можете использовать следующее: /p:ProjectDir="$(ProjectDir.Replace('\','\\'))" - person user247702; 27.01.2016

Попробуйте добавить " например:

/p:OutPath=""c:\temp\deploy\fun and games\Deployment\bin\""
person CNtw    schedule 28.11.2011
comment
Вы можете отформатировать как код, используя кнопку ctrl+k или кнопку {} над окном редактора. - person stema; 28.11.2011

Msbuild также работает с пробелами в OutDir, если вы переключаете \ на / при использовании кавычек:

/p:OutDir="c:/temp/deploy/fun and games/out/"
/p:WebProjectOutputDir="c:/temp/deploy/fun and games/Deployment/"
person Trey Mack    schedule 16.03.2011
comment
Работает и с /p:AspnetMergePath="C:/Program Files (x86)/Microsoft SDKs/Windows/v8.0A/bin/NETFX 4.0 Tools/", я только что узнал. Обратная косая черта не удалась. - person Trey Mack; 21.02.2017

> "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

Попробуй это.

Также попробуйте через графический интерфейс VSStudio. Затем скопируйте настройки и попробуйте с MS Build.

person Ganesh R.    schedule 29.06.2009

Для меня рабочее решение:

/p:SQLCMD="\"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE\""

Другими словами: заключение всей строки в кавычки (внешние кавычки не передаются в качестве значения в MSBuild).

Значение внутри MSBuild для этого свойства: «C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE» (с кавычками).

person Eric Lemes    schedule 12.05.2014

Если у вас есть несколько параметров в коммутаторе, вы не можете «избежать» проблемы, исправив путь. Что вы можете сделать, так это указать свои параметры переключения между some_parameters1 some_parameters2 .

Что-то типа:

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

Конечно, многое зависит от синтаксиса переключателей, но это работает для меня и моей команды.

person Valentin Yanakiev    schedule 18.05.2015
comment
‹Exec Command=$(SomeCommand) /multipleSwitch=someRule:someValue | someRule2:someValue2 /> Это должно было быть в чем-то подобном выше. - person Valentin Yanakiev; 18.05.2015

Чтобы сделать это при использовании файла .proj, когда ваш путь включен в такие свойства, как $(DeployFolder) и $(NuGetExe), вы можете использовать "" следующим образом:

<Exec Command="&quot;$(NuGetExe)&quot; pack -OutputDirectory &quot;$(DeployFolder)&quot;" />
person nickspoon    schedule 10.08.2015