Командный файл 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("/Y /M:{0} -allowUntrusted", DeploymentServerName)]" DisplayName="Deploy selected Web Application using MSDeploy" EnvironmentVariables="[New Dictionary(Of String, String) From {{"_MsDeployAdditionalFlags", DeploymentParameters}}]" FileName="[String.Format("{0}\Packages\{1}\{2} {3}\{4}.deploy.cmd", 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'"