Почему мои параметры среды не обнаруживаются при развертывании моего ASP.NET Основное веб-приложение для Azure?

#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 Ядро считывает данные из следующих переменных среды:

  1. DOTNET_ENVIRONMENT
  2. ASPNETCORE_ENVIRONMENT при вызове ConfigureWebHostDefaults. Значение по умолчанию ASP.NET Основные шаблоны веб-приложений вызывают ConfigureWebHostDefaults. Значение ASPNETCORE_ENVIRONMENT переопределяет DOTNET_ENVIRONMENT

В рамках предусмотрены следующие значения:

  • Разработка : Файл launchSettings.json настраивается ASPNETCORE_ENVIRONMENT на разработку на локальном компьютере.
  • Постановка
  • Производство : Значение по умолчанию, если DOTNET_ENVIRONMENT и ASPNETCORE_ENVIRONMENT не было установлено.