ASP.NET Core игнорирует переменную ASPNETCORE_ENVIRONMENT - PullRequest
1 голос
/ 22 марта 2019

Я знаю, что другие опубликовали эту проблему, но ни одно из решений, которые я видел, не появилось в моем случае. У меня есть приложение ASP.NET WebAPI. Я смог опубликовать его на двух разных серверах разработки через Visual Studio Publish. На обоих целевых серверах я установил для переменной среды ASPNETCORE_ENVIRONMENT значение «Разработка» через графический интерфейс Windows, и приложение подхватывает это, использует мои настройки appSettings.Development.json и работает как положено.

Теперь я развернул его на своем тестовом сервере. На этом сервере я установил переменную среды ASPNETCORE_ENVIRONMENT на Test через Windows GUI, но когда приложение запускается, оно всегда говорит: Hosting Environment: Production. Я проверил свой файл launchSettings.json, как было предложено в одном посте, но там ничего не устанавливает переменную среды в Production. Поскольку Production является значением по умолчанию, у меня нет кода, который бы устанавливал это значение где-либо.

Мое успешное развертывание на моем сервере Dev и мое неудачное развертывание на моем тестовом сервере были выполнены с помощью публикации dotnet, выполненной из Bamboo. Я не знаю, почему приложение, запущенное на моем тестовом сервере, не получает настройку теста ASPNETCORE_ENVIRONMENT.

Несколько других деталей, о которых я подумал на выходных, которые могут иметь или не иметь отношение к делу.

VS Публикация в Windows Server 2008 R2, отладочная сборка, работает как положено. На целевом сервере для ASPNETCORE_ENVIRONMENT задано значение «Разработка», отчеты журнала приложений. Хостинговая среда: действуют настройки «appSettings.Development.json».

Развертывание VS Publish и Bamboo (через dotnet publish) в Windows Server 2016, отладочная сборка, работает как положено. У меня есть два экземпляра сайта на этом сервере. Один из них опирается на переменную ASPNETCORE_ENVIRONMENT, для которой задано значение Development, и она работает как положено. Другой переопределяет переменную среды для своего пула приложений через параметр в applicationHost.config. В обоих случаях приложения правильно выбирают переменную среды и отражают правильную среду размещения.

Развертывание Bamboo через dotnet, публикация в Windows Server 2012, сборка выпуска, не работает должным образом. Приложение сообщает о хостинговой среде как производственной (по умолчанию), предполагая, что ему не удалось подобрать переменную среды, которую я установил. Сбой приложения из-за отсутствия настроек приложения в appSettings.Development.json.

Таким образом, сценарий сбоя представляет собой другую серверную операционную систему, но, поскольку она работает как в 2008, так и в 2016 году, я думаю, что она будет работать в 2012 году. А сценарий сбоя представляет собой сборку выпуска или сборку отладки, но я не думаю, что это повлияет на настройку поведения во время выполнения.

Я не думаю, что это проблема launchSettings.json, потому что это предположительно затронет все мои целевые развертывания, а не только мой тестовый сервер. Я подтвердил через командную строку, что переменная окружения установлена ​​правильно. Я действительно не хочу решения на основе web.config, которое, я думаю, мне не нужно, и которое потребует преобразований, специфичных для среды.

Некоторые другие вещи, которые я пробовал, не помогли: Изменен тип сборки с Release на Debug (так как это Debug в работающих средах). Все еще не работает. Пробовал регистрировать другие переменные среды, но приложение умирает до того, как попадает в мой код регистрации. Все еще работаем над этим ... Попытался установить переменную среды в applicationHost.config, как я делал на моем сервере разработки, но тестовым сервером является Windows Server 2012 и IIS 8, и он не поддерживает элемент в applicationHost.config. (Сервер разработки - это Windows Server 2016 и IIS 10, которые поддерживают элемент в applicationHost.config.) Пробовал VS Publish vs. Bamboo развертывание. Все еще не работает.Я сравнил установки .NET Core на серверах Dev и Test. Оба имеют хост-версию 2.2.3, один и тот же коммит. На Dev-сервере установлены SDK; Тест сервера нет. На сервере Dev установлено несколько версий среды выполнения, последняя из которых - 2.2.3. На тестовом сервере установлено только 2.2.3. Основным отличием, похоже, являются SDK, и я предполагаю, что мне не нужно устанавливать SDK для чтения переменных среды.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Я думаю, что ударил это и решил это раньше. Мне пришлось установить для LoadUserProfile значение True в расширенных настройках пула приложений IIS. Я не уверен, почему это так, потому что все, что я прочитал, говорит, что вам нужно это, чтобы прочитать user переменные окружения, а мое приложение не может прочитать system переменные окружения. Но в любом случае, когда я установил для LoadUserProfile значение true в моем пуле приложений IIS, приложение правильно считывает системную переменную среды ASPNETCORE_ENVIRONMENT, и приложение работает как положено.

0 голосов
/ 22 марта 2019

Вы пытались установить это значение в веб-конфигурации?

      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
...