Командный файл MSDeploy больше не обрабатывает кавычки

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

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

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

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

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 автоматически генерируется каждый раз (по крайней мере, похоже)

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


Обновление; Я работал над этой проблемой, используя переменную окружения для передачи этих значений. Он по-прежнему не решает проблему, что новые файлы 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]">

Ответы

Ответ 1

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

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

Ответ 2

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

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