Как у меня есть пробелы в 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 нет пробелов?)
7 ответов
Только что нашел ответ на этот старый вопрос. Для обработки пробелов вы должны использовать escape-символ \ во всех папках. В принципе
/p:OutPath="c:\temp\deploy\fun and games\Deployment\bin\"
должно быть
/p:OutPath="c:\\temp\\deploy\\fun and games\\Deployment\\bin\\"
и волшебным образом это работает!
Попробуй добавить "
например:
/p:OutPath=""c:\temp\deploy\fun and games\Deployment\bin\""
Msbuild также, похоже, работает с пробелами в OutDir, если вы переключаете \ на /, используя кавычки:
/p:OutDir="c:/temp/deploy/fun and games/out/"
/p:WebProjectOutputDir="c:/temp/deploy/fun and games/Deployment/"
Для меня рабочее решение:
/ 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" (с кавычками).
> "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 GUI. Затем скопируйте настройки и попробуйте с MS Build.
Если у вас есть несколько параметров в переключателе, вы не сможете "избежать" проблемы, исправив путь. То, что вы можете сделать, это поместить ваши параметры переключателя между " some_parameters1 some_parameters2 ".
Что-то вроде:
<Exec Command="SomeCommand /useMultipleParameterSwitch="value1:blabla1 | value2:blabla2""/>
Конечно, многое зависит от синтаксиса переключателей, но это работает для меня и моей команды.
Чтобы сделать это при использовании файла.proj и ваш путь включен в свойства, такие как $(DeployFolder) и $(NuGetExe), вы можете использовать "& quot;" как это:
<Exec Command=""$(NuGetExe)" pack -OutputDirectory "$(DeployFolder)"" />