Автоматическая установка appsettings.JSON для сред разработки и выпуска в asp.net ядро?
Я определил некоторые значения в моем appsettings.json
для таких вещей, как строки подключения к базе данных, местоположения webapi и тому подобное, которые отличаются для разработки, постановки и живых сред.
есть ли способ иметь несколько appsettings.json
файлы (например,appsettings.live.json
, etc, etc) и имеют asp.net app просто "знать", какой из них использовать на основе конфигурации сборки он работает?
6 ответов
вы можете использовать условную компиляцию:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
#if SOME_BUILD_FLAG_A
.AddJsonFile($"appsettings.flag_a.json", optional: true)
#else
.AddJsonFile($"appsettings.no_flag_a.json", optional: true)
#endif
.AddEnvironmentVariables();
this.configuration = builder.Build();
}
Я добавил снимок рабочей среды, потому что это стоит моих нескольких часов для R&D.
Сначала добавьте ключ к вашему .
см. ниже snap, я добавил "Development"
как мое окружение.
затем добавьте файл appSetting с тем же именем в свой проект.
добавлена привязка, ищите 2 разных файла с именем с.
appSettings.Development.Json
appSetting.json
и, наконец, настройте его на свой класс запуска, как показано ниже.
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
и, наконец, я запускаю его из терминала, как это.
dotnet run --среда "разработка"
где развитие моя окружающая среда.
вы можете использовать переменные окружения и ConfigurationBuilder
класс 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.xxx.json
файл для каждой среды вам нужно, с "xxx"имя среды. Обратите внимание, что вы можете поместить все глобальные значения конфигурации в свой "нормальный" appsettings.json
file и только помещают материал, специфичный для среды, в эти новые файлы.
теперь вам нужна только переменная среды под названием ASPNETCORE_ENVIRONMENT
С какой-то конкретной значение окружающей среды ("живая"," постановка"," производство", что угодно). Эту переменную можно указать в параметрах проекта для среды разработки, и, конечно же, ее необходимо задать в промежуточной и рабочей средах. То, как вы это делаете, зависит от того, что это за среда.
обновление: я только что понял, что вы хотите выбрать appsettings.xxx.json
на основе вашего текущего конфигурация. Этого нельзя добиться с моей предложил решение, и я не знаю, есть ли способ сделать это. Однако "переменная среды" работает и может быть хорошей альтернативой вашему подходу.
просто обновление для пользователей .NET core 2.0, вы можете указать конфигурацию приложения после вызова CreateDefaultBuilder
:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(ConfigConfiguration)
.UseStartup<Startup>()
.Build();
static void ConfigConfiguration(WebHostBuilderContext ctx, IConfigurationBuilder config)
{
config.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("config.json", optional: false, reloadOnChange: true)
.AddJsonFile($"config.{ctx.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
}
}
In ASP.NET Core вы должны использовать EnvironmentVariables вместо конфигурации сборки для правильных appsettings.в JSON
Right click on you project > Properties > Debug > Environment Variables
ASP.NET ядро будет принимать правильные appsettings.файл json. Если вы это сделаете @Dmitry, у вас будут проблемы, например. при переопределении параметр appsettings.в JSON значения в Azure.
вы можете добавить имя конфигурации как ASPNETCORE_ENVIRONMENT
на launchSettings.json
ниже
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:58446/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"environmentVariables": {
ASPNETCORE_ENVIRONMENT": "$(Configuration)"
}
}
}