Автоматически устанавливать appsettings.json для dev и среды выпуска в ядре asp.net?
Я определил некоторые значения в моем appsettings.json
для таких вещей, как строки подключения к базе данных, веб-сайты и т.д., Которые отличаются для разработки, промежуточной и живой среды.
Есть ли способ иметь несколько файлов appsettings.json
(например, appsettings.live.json
и т.д. И т.д.) И что приложение asp.net просто "знает", какой из них использовать на основе конфигурации сборки, которую он запускает?
Ответы
Ответ 1
Вы можете использовать условную компиляцию:
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();
}
Ответ 2
Я добавил снимок рабочей среды, потому что это затрачивает несколько часов на исследования и разработки.
Сначала добавьте ключ в ваш файл Launch.Json
.
Смотрите ниже, я добавил "Development"
качестве моей среды.
![enter image description here]()
Затем добавьте файл appSetting с тем же именем в ваш проект.
Добавлена оснастка, ищите 2 разных файла с именами.
-
appSettings.Development.Json
-
appSetting.json
![enter image description here]()
И, наконец, настройте его на свой класс StartUp, как показано ниже.
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 --environment "Разработка"
где развитие - это моя среда
Ответ 3
Вы можете использовать переменные среды и класс 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
и помещать только эти файлы в эти новые файлы.
Теперь вам нужна переменная окружения ASPNETCORE_ENVIRONMENT
с некоторой специфической средой ("живая", "постановка", "производство", что угодно). Вы можете указать эту переменную в своих настройках проекта для вашей среды разработки, и, конечно же, вам нужно также установить ее в своих промежуточных и производственных средах. То, как вы это делаете, зависит от того, что это за среда.
UPDATE: Я просто понял, что вы хотите выбрать appsettings.xxx.json
на основе вашей текущей конфигурации сборки. Это не может быть достигнуто с моим предлагаемым решением, и я не знаю, есть ли способ сделать это. Однако "переменная среды" работает и может быть хорошей альтернативой вашему подходу.
Ответ 4
Просто обновление для пользователей.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);
}
}
Ответ 5
В ASP.NET Core вы должны использовать EnvironmentVariables вместо конфигурации сборки для правильного appsettings.json
Щелкните правой кнопкой мыши по вашему проекту> Свойства> Отладка> Переменные среды
![enter image description here]()
ASP.NET Core примет правильный файл appsettings.json.
Теперь вы можете использовать эту переменную среды следующим образом:
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();
Configuration = builder.Build();
}
Если вы сделаете это @Dmitry way, у вас будут проблемы, например. при переопределении значений appsettings.json в Azure.
Ответ 6
Вы можете добавить имя конфигурации как ASPNETCORE_ENVIRONMENT
в launchSettings.json
как launchSettings.json
ниже
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:58446/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"environmentVariables": {
ASPNETCORE_ENVIRONMENT": "$(Configuration)"
}
}
}
Ответ 7
1. Создайте несколько appSettings. $ (Configuration).jsons, таких как appSettings.staging.json appSettings.production.json
2. Создайте событие предварительной сборки в проекте, которое копирует соответствующий файл в appSettings.json следующим образом.
скопировать appSettings. $ (Конфигурация).json appSettings.json
3. Используйте только appSettings.json в вашем Config Builder
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
Ответ 8
Привет Попробовал вышеуказанные решения. но appsettings..json добавляется в корень проекта. как показано на снимке ниже
Щелчок