Пакетный файл MSDeploy больше не обрабатывает кавычки - PullRequest
16 голосов
/ 04 апреля 2011

В рамках нашего процесса сборки мы развертываем наши веб-приложения с использованием MSDeploy.Это прекрасно работало до нескольких недель назад (я думаю, когда мы обновили наш сервер сборки / TFS до SP1 TFS 2010).

В нашем определении сборки есть шаг для вызова процесса.Этот процесс вызовет сгенерированный файл deploy.cmd и передаст пару дополнительных параметров.Долгое время это работало нормально, но теперь мы получаем следующее:

Ошибка: нераспознанный аргумент '"-skip: objectName = filePath, absolutePath =. * Cmsservices.config"'.Все аргументы должны начинаться с "-".

Как описано в справке, мы передаем дополнительные аргументы в кавычках:

WebApplication.deploy.cmd / Y / M: sv-ad-iis02-allowUntrusted "-skip: objectName = filePath, absolutePath =. * cmsservices.config" "-skip: objectName = filePath, absolutePath =. * servicemodel.client.config" "-skip: objectName = dirPath, absolutePath = app_data"

Однако этот трюк больше не работает.Удаление кавычек также удалит любые символы, такие как = и, которые будут заменены пробелами.

Я проследил его (сравнивая старый deploy.cmd с новой версией) до этой строки:

Строка 76:

@rem Any addition flags, pass through to the msdeploy
set _ArgMsDeployAdditionalFlags=%_ArgMsDeployAdditionalFlags% %_ArgCurrentOriginal%

В предыдущей версии этобыло:

@rem Any addition flags, pass through to the msdeploy
set _ArgMsDeployAdditionalFlags=%_ArgMsDeployAdditionalFlags% %_ArgCurrent%

_ArgCurrentOriginal использует % 1 вместо % ~ 1 , и если я изменю этот код, все будет работать снова.Однако файл deploy.cmd генерируется автоматически каждый раз (по крайней мере, выглядит так)

Любая подсказка, почему это было изменено и как с этим бороться?


Update;Я обошел эту проблему, используя переменную окружения для передачи этих значений.Это по-прежнему не решает проблему, заключающуюся в том, что новые файлы deploy.cmd экранируют кавычки другим способом.

Решение, которое я сейчас поместил в свой рабочий процесс развертывания:

<mtbwa:InvokeProcess Arguments="[String.Format(&quot;/Y /M:{0} -allowUntrusted&quot;, DeploymentServerName)]" DisplayName="Deploy selected Web Application using MSDeploy" EnvironmentVariables="[New Dictionary(Of String, String) From {{&quot;_MsDeployAdditionalFlags&quot;, DeploymentParameters}}]" FileName="[String.Format(&quot;{0}\Packages\{1}\{2} {3}\{4}.deploy.cmd&quot;, BuildDetail.DropLocation, platform.Configuration, ApplicationName, VersionString, DeploymentPackageName)]" sap:VirtualizedContainerService.HintSize="464,420" Result="[ExitCode]">

Ответы [ 2 ]

19 голосов
/ 20 апреля 2011

Это ошибка, представленная в релизе SP1.Вы можете обойти это, отредактировав %ProgramFiles(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets (обратите внимание на 64-битный путь).Измените строки 3238-3258, чтобы они соответствовали содержимому в старом файле deploy.cmd;разница должна составлять всего 3 строки, удаляя _ArgCurrentOriginal и используя _ArgCurrent.

Также недавно была опубликована КБ по проблеме: http://support.microsoft.com/kb/2537134. Сюда входит обновленный файл .targets, поэтому у вассделать редактирование самостоятельно.

0 голосов
/ 11 декабря 2013

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

.\Deploy.cmd /y 
  /m:https://SERVER:8172/msdeploy.axd 
  -allowUntrusted 
  "-postSync:runCommand='echo hello'"
...