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

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

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

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

Что я хотел бы сделать, это создать два файла конфигурации с именем aspsettings.Development.json а также aspsettings.LocalDevelopment.jsonоба из которых находятся в моих двух основных проектах ASP.Net в моем решении - один для веб-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, я получаю следующую ошибку:

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

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

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

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

Другие вопросы по тегам