Могу ли я настроить несколько сред разработки с разными файлами appsettings.xxx.json и профилями отладки?

#azure #asp.net-core #asp.net-core-configuration

#azure #asp.net-core #asp.net-core-configuration

Вопрос:

Я прочитал немного документации, касающейся настройки сред для развертывания ASP.Net Основные приложения. В этих статьях обычно упоминается разработка. Промежуточный и производственный режимы по имени, но никогда не отклоняйтесь от этих традиционных названий сред.

Обычно после завершения «разработки» требуется отключить параметры разработки / отладки, чтобы конфиденциальная информация не просочилась в Интернет в случае сбоя вашего приложения. Это имеет смысл.

Однако мое приложение находится на ранних стадиях разработки, и мне нужны две конфигурации среды разработки, которые мы можем отладить. В частности, моя команда в основном захочет разрабатывать локально, подключаясь к локальной базе данных SQL Server. Однако нам необходимо настроить и протестировать базу данных Azure, и для предварительной настройки было бы полезно, если бы мы могли запустить режим разработки сервера локально и иметь возможность подключаться к нашим базам данных Azure из наших блоков разработки.

Что я хотел бы сделать, так это создать два конфигурационных файла с именами aspsettings.Development.json и aspsettings.LocalDevelopment.json , оба из которых находятся в моих двух ASP.Net основные проекты в моем решении — один для Web API, а другой для проекта пользовательского интерфейса.

Development будет содержать все значения для подключения к соответствующим серверам базы данных разработчиков (база данных Azure, используемая для тестирования разработки, требующей доступа к Azure), а LocalDevelopment среда будет использоваться для подключения к локальной базе данных.

Я добавил эти файлы в свой проект, скопировал Development детали в LocalDevelopment и изменил только строки подключения для конфигурации проекта API.

Затем я открыл свойства своих проектов и добавил два профиля для отладки. В качестве попытки разобраться в этом я создал эти идентичные профили как для проекта API, так и для проекта пользовательского интерфейса. Эти профили были названы «IIS Local», а другой — «IIS Dev Server». Наконец, на каждой странице проекта для каждого нового профиля я ввел соответствующие значения для ASPNETCORE_ENVIRONMENT Development и LocalDevelopment .

Когда я отлаживаю приложение как среду и профиль Development, it works fine. However, when I run the application using the LocalDevelopment, я получаю следующую ошибку:

Ошибка. При обработке вашего запроса произошла ошибка. Идентификатор запроса: 0HLLE04D5NFDU: 00000001

Переключение режима разработки на среду разработки отобразит более подробную информацию о возникшей ошибке.

Среда разработки не должна быть включена в развернутых приложениях, поскольку это может привести к отображению конфиденциальной информации из исключений конечным пользователям. Для локальной отладки среду разработки можно включить, установив для переменной среды ASPNETCORE_ENVIRONMENT значение Development и перезапустив приложение.

Похоже, что это не имеет смысла, поскольку обе конфигурации одинаковы для их соответствующих проектов, и единственными отличиями являются строки connections в API и, я добавил EnvironmentName свойство для идентификации.

Возможно, я что-то делаю не так?

Вот содержимое LocalDevelopment файла. На всякий случай, если я что-то упускаю.

Настройки в API

 {
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "EnvironmentName": "LOCAL",
  "ConnectionStrings": {
    "Database": "xxx"
  }
}
  

Настройки в пользовательском интерфейсе

 {
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}
  

Ответ №1:

В вашем Startup.cs, скорее всего, в вашем Configure методе есть что-то вроде следующего:

 if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseDatabaseErrorPage();
}
else
{
    app.UseExceptionHandler("/error/500");
}
  

Вам нужно изменить условие, чтобы оно было примерно таким:

 if (env.IsDevelopment() || env.IsEnvironment("LocalDevelopment"))
  

Или вы можете просто создать любую среду, которая не является производственной, используя страницы ошибок разработки:

 if (!env.IsProduction())
  

Такие методы, как IsDevelopment , IsProduction и т.д., Представляют собой просто синтаксический сахар, поэтому вам не нужно делать IsEnvironment("Development") . Однако, поскольку LocalDevelopment это ваше собственное творение, очевидно, что для этого нет встроенного метода.

Комментарии:

1. Ах, вот и все. Это первый ASP.Net Основной проект, с которым мне приходилось работать, и мой первый «совершенно новый» проект, над которым я, вероятно, работал почти за 10 лет. (Там так много обслуживания и обновлений, которые нужно выполнить!) Эти типы конфигураций / сред являются новой территорией для меня. Спасибо за помощь.

2. Я потратил довольно много времени на поиск волшебного соуса, который позволяет Microsoft узнать, env.IsDevelopment() что это разработка, и оказалось, что это сравнение строк. Плохое отображение. Я бы сказал, используя env.IsEnvironment("Development") более яркие моменты, что переименование Development в Dev приведет к сбоям.