#c# #azure #asp.net-core #environment-variables
Вопрос:
Я пытаюсь определить некоторые переменные среды в своем веб-приложении. Я размещаю свой сайт в Azure, у которого есть слот промежуточного развертывания, в который сайт переходит первым, а затем, если изменения будут отменены, он будет запущен в производство.
URL-адреса для этих двух мест следующие:
Производство
"BaseUrl": "https://mycompany.azurewebsites.net"
Постановка
"BaseUrl": "https://mycompany-staging2n1h.azurewebsites.net"
Я хочу, чтобы мой appsettings.Staging.json
файл использовался, когда сайт попадет в промежуточную область, а затем, как только он будет выпущен в производство, я хочу, чтобы он использовался appsettings.json
.
Насколько я понимаю, если вы не определяете рабочий
appsettings.Production.json
файл в своем приложении, по умолчаниюappsettings.json
он равен .
Итак, я создал appsettings.Staging.json
файл в своем приложении, который содержит строку подключения, отличную от рабочей среды.
appsettings.json
{
"AzureAd": {
"CallbackPath": "/signin-oidc",
"BaseUrl": "https://mycompany.azurewebsites.net"
},
"ConnectionStrings": {
"MyCompanyConnection": "production connection string"
},
"AllowedHosts": "*"
}
настройки приложений.Постановка.json
{
"AzureAd": {
"CallbackPath": "/signin-oidc",
"BaseUrl": "https://mycompany-staging2n1h.azurewebsites.net"
},
"ConnectionStrings": {
"MyCompanyConnection": "staging connection string"
},
"AllowedHosts": "*"
}
Затем я вошел в launchSettings.json
файл, чтобы настроить это следующим образом:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:xxxx",
"sslPort": xxxx
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"MyCompany": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
},
"MyCompany Staging": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging"
}
}
}
}
Когда я развертываю свое приложение в Azure и оно попадает в промежуточную область, оно просматривает неправильную строку подключения, что означает, что оно не использует правильный файл appsettings. Я пропустил какой-то шаг или что-то неправильно настроил?
Комментарии:
1. Это, конечно, зависит от вас, но мне проще использовать конфигурацию службы приложений. Они извлекаются в качестве переменных среды и переопределяют все, что содержится в файле json.
Ответ №1:
Вам нужно установить параметр ASPNETCORE_ENVIRONMENT
в Azure — для службы приложений, он находится в разделе Конфигурация:
(Изменения launchSettings.json
не будут иметь никакого эффекта при развертывании приложения, оно используется только Visual Studio)
Как говорится в документации:
Чтобы определить среду выполнения, ASP.NET Ядро считывает данные из следующих переменных среды:
DOTNET_ENVIRONMENT
ASPNETCORE_ENVIRONMENT
при вызове ConfigureWebHostDefaults. Значение по умолчанию ASP.NET Основные шаблоны веб-приложений вызывают ConfigureWebHostDefaults. ЗначениеASPNETCORE_ENVIRONMENT
переопределяетDOTNET_ENVIRONMENT
В рамках предусмотрены следующие значения:
- Разработка : Файл launchSettings.json настраивается
ASPNETCORE_ENVIRONMENT
на разработку на локальном компьютере. - Постановка
- Производство : Значение по умолчанию, если
DOTNET_ENVIRONMENT
иASPNETCORE_ENVIRONMENT
не было установлено.