Приложение Delpoy NetCore, использующее Azure DevOps - PullRequest
0 голосов
/ 28 апреля 2020

Я создаю релиз-конвейер на Azure DevOps сервере, и у меня возникла некоторая проблема.

Как я могу изменить свойства в. net основном файле конфигурации (appsettings.EnvName. json).

Когда я создавал приложение на платформе, у меня было parameters.xml, где я устанавливал XPath в значение, значение по умолчанию и имя свойства. И на конвейере я установил ключ-значение. Но в net базовом приложении этот метод не работает =)

Я хочу использовать примерно такой же подход. Что бы я указал путь к значению и его значение. Например:

ConnectionStrings.Db1="Server={DB1.Server};Database={DB1.DbName};Trusted_Connection = True;"
ConnectionStrings.Db2="Server={DB2.Server};Database={DB2.DbName};Trusted_Connection = True;"

Теперь я добавил шаг для выполнения произвольного сценария powershell на удаленном сервере

$jsonFile = 'appsettings.Template.json'
$jsonFileOut = 'appsettings.Production.json'

$configValues = 
'ConnectionStrings.Db1="Server={DB1.Server};Database={DB1.DbName};Trusted_Connection = True;"',
    'ConnectionStrings.Db2="Server={DB2.Server};Database={DB2.DbName};Trusted_Connection = True;"'

$config = Get-Content -Path $jsonFile | ConvertFrom-Json

ForEach ($item in $configValues)
{
    $kv = $item -split "="
    Invoke-Expression $('$config.' + $kv[0] + '="' + $kv[1] + '"')
}

$config | ConvertTo-Json | Out-File $jsonFileOut

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

1 Ответ

1 голос
/ 28 апреля 2020
Ядро

do tnet обрабатывает это по-другому. Полная структура, основанная на преобразовании app.config. Это означает, что вы определили один файл, который позже был передан для данной конфигурации сборки (например, Debug, Release или ваш собственный). В do tnet core вы определяете настройки приложения. json для каждой среды. Это работает очень хорошо, потому что все настройки находятся в вашем скомпилированном приложении. И затем во время выполнения на основе переменной окружения ASPNETCORE_ENVIRONMENT выбираются правильные настройки. Таким образом, вы можете иметь один пакет для всех ваших сред без перекомпиляции. Чтобы извлечь выгоду из этого, вы должны определить файл для каждой среды, но это не преобразование. Это полный файл.

Например, файл для вашего локального проекта может выглядеть так:

{
  "ConnectionStrings": {
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
  },
}

И файл для вашей среды разработки appsettings.dev.json, например:

{
  "ConnectionStrings": {
    "BloggingDatabase": "Server=102.10.10.12\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
  },
}

А затем, чтобы настроить загрузку этого файла, вы должны настроить Startup метод:

public Startup(IHostingEnvironment env)  
{
    var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        this.Configuration = builder.Build();
}

Это загрузит все ваши файлы appsettings и позже будет использовать правильный файл, основанный на переменной среды.

Чтобы установить эту переменную, вы можете использовать эту команду в командной строке setx ASPNETCORE_ENVIRONMENT Dev или в Powershell [Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Dev", "Machine")

. Надеюсь, она поможет вам понять, как работают настройки на ядре do tnet. Если вам нужны дополнительные рекомендации, проверьте ссылки:

Подводя итог, вам не нужно менять настройки в конвейере выпуска. Вам нужно предварительно подготовить полный файл для enviro mnet, где вы собираетесь разместить свое приложение. Вы можете быть заинтересованы в замене некоторых значений в файле на основе переменных в вашем конвейере. Здесь можно рассмотреть несколько вариантов, например

Это полезно, если вы не хотите хранить свои секреты непосредственно в исходном коде.

РЕДАКТИРОВАТЬ

Если вы хотите заменить значения в вашем файле appsettings одним из опция - замена токена. Для этого вы должны сначала вместо значений сохранить токен в вашем файле. Например, #{SomeVariable}# будет заменено значением SomeVariable` из вашего конвейера для этого подтверждения задача замены токена .

enter image description here

...