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

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

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

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

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

Development будет содержать все значения для подключения к соответствующим серверам базы данных dev (база данных 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`, я получаю следующую ошибку:

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

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

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

Кажется, это не так, поскольку оба конфига одинаковы для соответствующих проектов, и единственными отличиями являются строки соединений в 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 Ответ

1 голос
/ 21 марта 2019

В вашем 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 - ваше собственное творение, очевидно, что для этого нет встроенного метода.

...