Народ,
Мы используем локальную версию TFS 2017 и работаем над подготовкой / развертыванием веб-сайта и базы данных Azure.Наша задача подготовки / обновления базы данных Azure работает хорошо, но пока мы не сможем автоматизировать часть веб-сайта, у нас будет промежуточный этап, на котором мы копируем веб-пакет из сборки в промежуточный общий ресурс.
Этот шаг выполняется наГруппа развертывания в VFSagent TFS выглядит следующим образом:
- Создать временную папку
- Развернуть zip-файл во временную папку
- Получить папку Out под развернутым zip-файломfile
- Перемещение папки в корень временной папки
- Объединение файла appsettings.json с файлом master.appsettings.json для среды.
- Повторная архивация сетипакет
- Копирование веб-пакета в промежуточный целевой каталог в PRJ \ build #
Шаг 5) выполняется с помощью функции слияния Newtonsoft.Json.
# Load the Newtonsoft.Json dll
$asmNewtonsoftJson = [Reflection.Assembly]::LoadFile([io.path]::combine($FolderToZip, "Newtonsoft.Json.dll"))
# Read the appsettings.json file and store as a JObject
$appSettingsPath = [io.path]::combine($folderToZip, "appsettings.json")
$appSettingsJson = (Get-Content $appSettingsPath | Out-String)
$appSettings = [Newtonsoft.Json.Linq.JObject]::Parse($appSettingsJson)
# Read the master appsettings.json file from the env and store as a JObject
$appSettingsMasterPath = [io.path]::combine($AppSettingsMasterFolderPath, $Environment + ".appsettings.json")
$appSettingsMasterJson = (Get-Content $appSettingsMasterPath | Out-String)
$appSettingsMaster = [Newtonsoft.Json.Linq.JObject]::Parse($appSettingsMasterJson)
# Merge the master appsettings.json file into the appsettings.json file
$jms = New-Object Newtonsoft.Json.Linq.JsonMergeSettings
$jms.MergeArrayHandling = [Newtonsoft.Json.Linq.MergeArrayHandling]::Merge
$appSettings.Merge($appSettingsMaster, $jms)
# Write out the updated appsettings.json file
[io.File]::WriteAllText($appSettingsPath, $appSettings.ToString())
Примечание: $ folderToZip содержит расширенное содержимое веб-пакета.Он также содержит dll Newtonsoft.Json (и предположительно его зависимости).
Приведенный выше код прекрасно работает в приложении Windows PowerShell ISE, но завершается неудачно при запуске в задаче определения выпуска TFS.
Сбой на шаге 5) со следующей ошибкой:
2018-10-11T19:29:39.1790546Z ##[error]Unable to find type [Newtonsoft.Json.Linq.JObject].
At C:\vstsagent\A1\_work\r7\a\<path>\drop\Build\mymergescript.ps1:84 char:20
$appSettings = [Newtonsoft.Json.Linq.JObject]::Parse($appSettings)
CategoryInfo : InvalidOperation: (Newtonsoft.Json.Linq.JObject:TypeName) [], RuntimeException
FullyQualifiedErrorId : TypeNotFound
Похоже, что Newtonsoft.Json.dll не загружается должным образом при развертывании vtsagent TFS.
Любая помощь здесь приветствуется.