В предыдущих версиях ASP.NET Core мы могли динамически добавлять файлы appsetting.json с суффиксом среды, например appsettings.Production.json
, для производственной среды.
Поскольку структура немного отличается, кажется, что конфигурация теперь загружена в классе Program
.Но здесь мы не вводили ``, поэтому я попробовал сам, используя переменную окружения:
public class Program {
public static void Main(string[] args) {
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) {
string envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
string envConfigFile = $"appsettings.{envName}.json";
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(envConfigFile, optional: true);
var finalConfig = config.Build();
return WebHost.CreateDefaultBuilder(args)
.UseUrls("http://0.0.0.0:5000")
.UseConfiguration(finalConfig)
.UseStartup<Startup>();
}
}
Код был выполнен, но он не переопределяет мою конфигурацию appsettings.json
.Допустим, у меня есть следующее appsettings.json
:
{
"MyConnectionString": "Server=xxx,Database=xxx, ..."
}
Эта ConnectionString работает.Теперь я создаю appsettings.Development.json
{
"MyConnectionString": ""
}
и устанавливаю ASPNETCORE_ENVIRONMENT=Development
.Это должно определенно бросить исключение.Но приложение запускается правильно с ConnectionString из appsettings.json
.
В соответствии с изменениями конфигурации ASP.NET Core 2 , метод WebHost.CreateDefaultBuilder
должен сам использовать новый подход ConfigureAppConfiguration
и загружать конфигурацию, специфичную для среды, по умолчанию.Также официальные документы говорят, что appsettings.{Environment}.json
загружаются автоматически.Но это не работает, а также загрузка вручную, так как это не решает проблему:
return WebHost.CreateDefaultBuilder(args)
.UseUrls("http://0.0.0.0:5000")
.ConfigureAppConfiguration((builderContext, config) => {
IHostingEnvironment env = builderContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
})
.UseStartup<Startup>();
Как я могу переопределить конфигурацию, используя шаблон "appsettings.{envName}.json"
?Мне понравилось это, потому что было удобно переопределить env конкретные вещи в ASP.NET Core.