Вопрос по – Как мне получить пробелы в MSBuild WebProjectOutputDir?

21

Я пытаюсь вызвать 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   ответов
5

" например:

/p:OutPath=""c:\temp\deploy\fun and games\Deployment\bin\""
Единственное найденное мной рабочее решение, которое работает с макросами VS
Вы можете отформатировать как код с помощьюctrl+k, или{} Кнопка над окном редактора.
4

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

/p:OutDir="c:/temp/deploy/fun and games/out/"
/p:WebProjectOutputDir="c:/temp/deploy/fun and games/Deployment/"
Работает с/p:AspnetMergePath="C:/Program Files (x86)/Microsoft SDKs/Windows/v8.0A/bin/NETFX 4.0 Tools/" Я тоже только что узнал. Обратная косая черта не удалась.
22

Для обработки пробелов вы должны использовать escape-символ \ во всех папках. В принципе

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

должно быть

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

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

@Mateo вы можете использовать следующее:/p:ProjectDir="$(ProjectDir.Replace('\','\\'))"
Отлично! Похоже, у MSBuild есть какой-то необычный способ интерпретации командной строки. Спасибо за публикацию вашего результата.
Итак, как вы делаете это, когда вы используете макросы, такие как $ (ProjectDir)?
1

вы действительно не можете избежать их использования. проблема с исправлением пути. Что вы можете сделать, так это поместить параметры переключения между & quot; some_parameters1 some_parameters2 & quot ;.

Что-то вроде:

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

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

& lt; Exec Command = & quot; $ (SomeCommand) / multipleSwitch = & quot; someRule: someValue | someRule2: someValue2 & Amp; Quot; & Quot; / & GT; Это должно было быть в "Что-то вроде" выше.
0

войства, такие как $ (DeployFolder) и $ (NuGetExe), вы можете использовать & quot; & quot; & quot; как это:

<Exec Command="&quot;$(NuGetExe)&quot; pack -OutputDirectory &quot;$(DeployFolder)&quot;" />
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

Также попробуйте через VSStudio GUI. Затем скопируйте настройки & amp; попробуй с MS Build.

к сожалению, это не работает ChrisHDog
1

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

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

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

& lt; Exec Command = & quot; $ (SomeCommand) / multipleSwitch = & quot; someRule: someValue | someRule2: someValue2 & Amp; Quot; & Quot; / & GT; Это должно было быть в "Что-то вроде" выше.

Похожие вопросы