Преобразования app.config в Azure Devops для различных сред

У меня есть проект.Net Framework 4.6.1, в котором создается служба Windows. Мы хотим, чтобы это было построено и развернуто конвейером Azure Devops. Мы успешно создали конвейеры для всех наших веб-сервисов.Net Core (используя переменную ASPNETCORE_ENVIRONMENT и набор настроек.{ENV}.json файлов), но службы Windows, похоже, не работают так же хорошо с точки зрения предоставления различных конфигурация для разных сред.

У меня есть XDT-преобразования, работающие для XML-файла App.config. Я могу щелкнуть правой кнопкой мыши файлы в Visual Studio и "Превью предварительного просмотра", и все работает отлично.

Что не ясно, так это как я перевожу это в конфигурацию конвейера. Кажется, что задача Build способна выполнить преобразование, но тогда я не уверен, как у нас разные преобразования для разных этапов развертывания. Вместо этого происходит то, что все среды заканчиваются тем, что преобразование было применено к конфигурации сборки, выбранной как часть шага сборки.

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

Что мне не хватает?

1 ответ

То, что мы делаем с VSTS, которое, как я полагаю, похоже, в более новых Devure Azure. У нас есть преобразование добавления токенов в файл конфигурации IE "DefaultConnection": "Сервер =DBServer; База данных = БД; ID пользователя =DBUser; Пароль =DBPassword;" Затем в среде выпуска есть задача под названием Tokenization, которая извлекает переменные, установленные из среды выпуска, для замены подчеркнутых токенов.

Мы используем этот плагин для выполнения шага токенизации. https://marketplace.visualstudio.com/items?itemName=TotalALM.totalalm-tokenization

В дополнение к ответу Райана Шлютера вместо использования сторонней задачи токенизации доступна официальная задача преобразования файлов, которая отлично справляется с этой задачей. Задача недоступна как расширение; он должен быть создан из источника и вручную загружен на сервер Azure DevOps. У меня были небольшие проблемы (теперь они решены), но это команды, которые нужно запустить (из командной строки VS):

git clone https://github.com/microsoft/azure-pipelines-tasks.git
cd azure-pipelines-tasks
node make.js build test --task FileTransformV1
C:\Users\jason.payne\source\repos\external\azure-pipelines-tasks\_build\Tasks\FileTransformV1
tfx build tasks upload --task-path .\_build\Tasks\FileTransformV1 -u {URL}/{Collection} -t {PAT}

где {URL}, {Collection} а также {PAT} должны быть заполнены в соответствии с вашими данными.

Затем вы можете добавить эту задачу в конвейер выпуска вместе с желаемыми переменными в соответствии со следующим текстом справки из задачи:

Переменные, определенные в конвейерах сборки или выпуска, будут сопоставляться с записями 'key' или 'name' в разделах appSettings, applicationSettings и connectionStrings любого файла конфигурации и parameters.xml.

Это решение устраняет необходимость в файлах преобразования, контролируемых исходным кодом, содержащих различные параметры среды, и вместо этого помещает их в конвейер выпуска вместо того, где они должны быть. У тебя просто есть базаapp.config с пустыми значениями или значениями по умолчанию, и нет необходимости изменять его свойства действия сборки по умолчанию.

Другие вопросы по тегам