Преобразование XML и подстановка переменных не работают, если оба параметра выбраны в Azure DevOps.

Я уже некоторое время работаю над конвейерами сборки и выпуска, но недавно столкнулся с этой проблемой

Я выполняю преобразование конфигурации в приложении .net. Проблема, с которой я столкнулся, немного странная. Подстановка переменных не работает, если также включено преобразование XML, но будет работать ТОЛЬКО при включенной подстановке переменных. Я не знал, что это возможно, поскольку, по моему мнению, подстановка переменной будет работать после завершения преобразования XML. Я хочу использовать оба варианта. Как будто я хочу преобразовать существующий файл конфигурации, а затем заменить оставшиеся значения переменными конвейера и группами переменных. Таким образом, у меня было бы меньше участия других команд для преобразования всех ценностей, поскольку у меня не хватает времени. В конце концов все изменилось бы, но пока я хочу следовать описанному выше подходу. В журнале говорится, что преобразование Xml и подстановка переменных завершены успешно, но подстановки переменных не происходит.

Я упустил что-то очень глупое? Кто-нибудь сталкивался с такой проблемой.

введите описание изображения здесь


person AnsibleUser    schedule 24.07.2020    source источник
comment
какие-нибудь указатели, пожалуйста? все еще застрял в этой проблеме.   -  person AnsibleUser    schedule 27.07.2020
comment
На скриншоте видно, что вы используете задачу IIS web app deploy. Если да, вы можете проверить _temp folder в процессе развертывания. Преобразование происходит в этой папке. Вы могли бы сослаться на ответ. Если есть недоразумения, поправьте меня, пожалуйста.   -  person Kevin Lu-MSFT    schedule 27.07.2020


Ответы (1)


Судя по моему тесту, XML variable substitution и XML transformation могут работать одновременно.

Вот исходный файл web.config:

введите описание изображения здесь

Проверьте журнал, преобразование произошло в папке _temp вместо $(System.DefaultWorkingDirectory) (например, я использую группу развертывания для запуска задачи, поэтому путь $ (System.DefaultWorkingDirectory) равен C:\azagent\A18\_work\r4\a).

введите описание изображения здесь

В папке temp я заметил, что файл успешно преобразован.

введите описание изображения здесь

Если развертываемый вами объект является папкой, то это преобразование можно только найти во временной папке. После развертывания содержимое этой папки будет автоматически удалено после развертывания.

Если развертываемый вами объект представляет собой файл zip, в дополнение к временной папке будет автоматически создан zip-файл по пути $(System.DefaultWorkingDirectory), и файл web.config в этом zip-файле также будет успешно преобразован.

введите описание изображения здесь

введите описание изображения здесь

Обновление:

Вот некоторые подробности:

Файлы: (web.config и web.qa.config)

введите описание изображения здесь

Web.config:

  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PCWSUser" value="TheUserName" />
  </appSettings>

Web.qa.config:

  <appSettings>
    <add xdt:Transform="Replace" xdt:Locator="Match(key)" key="webpages:Enabled" value="true" />
    <add key="PCWSUser" value="TheUserNameQA" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
  </appSettings>

Переменные Release Pipeline:

введите описание изображения здесь

Настройки задачи:

введите описание изображения здесь

Итог: webpages:Version заменяется заменой переменной. Остальные изменяются преобразованием xml.

person Kevin Lu-MSFT    schedule 27.07.2020
comment
Спасибо Кевину за ответ. На самом деле это не говорит о том, произошло ли преобразование из-за xml или переменной. Несколько быстрых вопросов. Вы выбрали обе опции в конвейере, то есть xml и var, и был ли у вас файл преобразования в том же месте, например, web.qa.config и т.д., можете ли вы указать, какие значения были изменены из-за преобразования XML, а какие были изменены из-за подстановки переменных. - person AnsibleUser; 29.07.2020
comment
Привет, @AnsibleUser. Пожалуйста, проверьте обновление. Я поделился некоторыми подробностями о ваших вопросах. - person Kevin Lu-MSFT; 29.07.2020
comment
Спасибо Кевину за ясность, единственное различие, которое я вижу, заключается в том, что переменные в конфигурации являются взаимоисключающими, то есть ключи не могут присутствовать в обоих местах, то есть в преобразовании и в var. Если да, то приоритет имеет преобразование. Я предполагал, что сначала происходит преобразование, а затем оно перезаписывается заменой переменной. Попробую это. Еще раз спасибо, Кевин. - person AnsibleUser; 30.07.2020
comment
да. Ты прав. Преобразование XML выполняется перед преобразованием переменной. Поэтому, если переменная определена в xx.qa.config и переменной, она в конечном итоге будет заменена значением переменной. - person Kevin Lu-MSFT; 31.07.2020
comment
@AnsibleUser. Если ответ может вам помочь, попробуйте принять его в качестве ответа . Спасибо. - person Kevin Lu-MSFT; 31.07.2020
comment
Я выполнил отладку и обнаружил ошибку синтаксического анализа ... к сожалению, он не сообщает об ошибке синтаксического анализа для файла web.config ... Он просто выдает эту ошибку ... 2020-08-14T23: 46: 56.6511657Z ## [debug] Обнаружение кодировки файла с использованием спецификации 2020-08-14T23: 46: 56.6712776Z ## [отладка] Невозможно проанализировать файл: D: \ Non-Deploy \ TFSAgentazagent \ A3_work_temp \ temp_web_package_34975992642936804 \ Web.config 2020-08-14T23: 46: 56.6713097 Z ## [отладка] Ошибка: неполный документ - person AnsibleUser; 15.08.2020
comment
Думаю, я понял проблему. Проблема была связана с тегом CData в файле конфигурации. После того, как это было удалено из Web.config, а также из конфигурации Transform, оба параметра, похоже, работают. Придется потестить больше. - person AnsibleUser; 17.08.2020