Можем ли мы использовать один файл appsettings.json вместо поддержки нескольких версий appsettings.{environmentname}.jsoC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Можем ли мы использовать один файл appsettings.json вместо поддержки нескольких версий appsettings.{environmentname}.jso

Сообщение Anonymous »

Я использую .NET 6 и хочу добиться двух целей:
  • Использовать один файл appsettings.json вместо сохранения несколько версий appsettings.{environmentname}.json для разных сред.
  • Удалите жесткое кодирование из файла appsettings.{environmentname}.json, чтобы разрешить (1)
    (В настоящее время я жестко кодирую секреты, такие как строка подключения к БД, сведения о конфигурации хранилища ключей и т. д. для разных сред в соответствующих файлах настроек приложений, которые я хочу удалить, и вместо этого считываю те же секретные значения из Azure Key Vault, где я я уже храню то же самое)
Как я могу этого добиться?
Ниже фрагмент кода показывает, как я м поддерживаю 2 файлы appsettings.{environmentname}.json(Development & Release):
var builder = WebApplication.CreateBuilder(args);
var hostingEnvironment = builder.Environment;

if (hostingEnvironment.IsDevelopment())
{
builder.Configuration.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true)
.AddJsonFile($"appsettings.Development.json", false, true)
.AddEnvironmentVariables();
}
else
{
builder.Configuration.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true)
.AddJsonFile($"appsettings.Release.json", false, true)
.AddEnvironmentVariables();
}

Примечание. Я провел небольшое исследование и понял, что для (1) мы, вероятно, можем сделать что-то вроде:
builder.Configuration.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable(
"ASPNETCORE_ENVIRONMENT")}.json", false, true)
.AddEnvironmentVariables();

Но тогда, если предположить, что приложение будет автоматически развертываться каждый раз при использовании CI/CD, могу ли я установить значение ASPNETCORE_ENVIRONMENT в конвейере?
Что касается (2), я попытался удалить жестко закодированные секреты из файлов appsettings.{environment}.json и настроил хранилище ключей, как показано ниже, но это не сработало:builder.Services.Configure(options => builder.Configuration.GetSection("KeyVaultConfig").Bind(options));
if (!string.IsNullOrEmpty(builder.Configuration["KeyVaultConfig:KeyVaultUrl"]))
{
var credentials = new ClientSecretCredential(builtConfig["KeyVaultConfig:TenantID"], builtConfig["KeyVaultConfig:ClientID"], builtConfig["KeyVaultConfig:ClientKey"]);
var secretClient = new SecretClient(new Uri(builtConfig["KeyVaultConfig:KeyVaultUrl"]), credentials);
//builder.Configuration.AddAzureKeyVault...
}


Подробнее здесь: https://stackoverflow.com/questions/751 ... ple-versio
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»