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