Могу ли я настроить несколько сред разработки с разными файлами 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
это ваше собственное творение, очевидно, нет встроенного метода для этого.