Задача FileTransform в Azure DevOps выдает ошибку при преобразовании - PullRequest
1 голос
/ 10 июля 2020

Я использую задачу FileTransform@2 для преобразования web.config с web. [Environment] .config в Azure DevOps Pipeline (yaml). Кажется, что происходит сбой одного из отдельных преобразований, что приводит к сбою всего задания, хотя я не уверен, почему.

Вот сообщение об ошибке из задачи:

Executing SetAttributes (transform line 72, 48)
on /configuration/appSettings/add[@key='PCWSUser']
System.NullReferenceException: Object reference not set to an instance of an object.
Applying to 'add' element (no source line info)
   at Microsoft.Web.XmlTransform.XmlTransformationLogger.ConvertUriToFileName(XmlDocument xmlDocument)
Set 'key' attribute
   at Microsoft.Web.XmlTransform.XmlTransformationLogger.LogWarning(XmlNode referenceNode, String message, Object[] messageArgs)
Set 'value' attribute
   at Microsoft.Web.XmlTransform.Transform.ApplyOnAllTargetNodes()
Set 2 attributes
Done executing SetAttributes

Итак, это похоже, что PCWSUser appSetting ему не нравится.

Вот фрагмент web.config для PCWSUser:

...
<add key="PCWSUser" value="TheUserName" />
...

Вот web. [environment] .config (в данном случае web. qa.config) фрагмент для PCWSUser:

...
<add key="PCWSUser" value="TheUserNameQA" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
...

Я не совсем уверен, что делаю не так ... Когда преобразование выполняется локально в Visual Studio, проблем с ним нет . Еще одна странность заключается в том, что я запускал это несколько раз, и, похоже, каждый раз выбирал другое приложение, которое выдает ошибку. То же сообщение об ошибке и все такое, только другие настройки. Все настройки настроены таким образом. К вашему сведению.

Сообщите мне, если вам понадобится дополнительная информация.

ИЗМЕНИТЬ 1

Согласно @Kevin Предложение Lu-MSFT, я добавил /p:TransformWebConfigEnabled=false к этапу сборки и попытался снова.

Журналы этапа сборки:

##[debug]INPUT_MSBUILDARGS: '/t:rebuild /p:DeployOnBuild=true /p:PublishProfile="Dev" /p:PackageLocation="D:\agent\_work\283\a" /p:TransformWebConfigEnabled=false'

Однако преобразование все равно не удалось, хотя ошибка снова перемещалась . На этот раз ошибка находится между двумя шагами, поэтому я даже не понимаю, что пошло не так.

Развернуть журналы стадии:

Executing Replace (transform line 10, 105)
on /configuration/connectionStrings/add[@name='SqlConnectionString']
Applying to 'add' element (no source line info)
Replaced 'add' element
Done executing Replace
System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.Web.XmlTransform.XmlTransformationLogger.ConvertUriToFileName(XmlDocument xmlDocument)
   at Microsoft.Web.XmlTransform.XmlTransformationLogger.LogWarning(XmlNode referenceNode, String message, Object[] messageArgs)
   at Microsoft.Web.XmlTransform.Transform.ApplyOnAllTargetNodes()
Executing Replace (transform line 11, 105)
on /configuration/connectionStrings/add[@name='DB2ConnectionString']
Applying to 'add' element (no source line info)
Replaced 'add' element
Done executing Replace

1 Ответ

0 голосов
/ 10 июля 2020

Основываясь на моем тесте, FileTransform task может успешно преобразовать файл web.config.

Вот шаги (прямое преобразование файла без сборки проекта), вы можете обратиться к ним.

Шаг 1: Файловая структура. Убедитесь, что файлы находятся в одной папке.

Files

Web.config


  

  
....
    
  


web.qa.config

 ....   

Шаг 2: Используйте FileTransform task с Yaml.

  - task: FileTransform@2
      inputs:
        folderPath: 'configfolder'
        xmlTransformationRules: '-transform **\web.qa.config -xml **\web.config'  

Тогда задача может успешно выполняться. Но если папка содержит несколько файлов преобразования, это может вызвать ошибку.

С другой стороны, , если FileTransform task находится после этапа сборки, вам необходимо убедиться, что задача сборки не преобразует файл web.config.

Вы можете добавить аргументы Msbuild /p:TransformWebConfigEnabled=false в задачу сборки.

enter image description here

Here is обсуждение этой проблемы .

Надеюсь, это поможет.

...