#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 приведет к сбоям.