- Использовать один файл 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