2016-10-17 4 views
5

У меня есть два веб-сайта на моем промежуточном сервере, оба являются базовыми сайтами Asp.net Core, которые работают в IIS. Я установил переменную окружения ASPNETCORE_ENVIRONMENT в Staging по всей машине. Это хорошо работает для одного из сайтов, однако другой игнорирует переменную и работает в режиме производства. Мне нужно настроить среду хостинга в файл web.config, чтобы запустить его в промежуточном режиме.Переменная окружения Asp.Net Core Hosting игнорируется

Любые подсказки относительно того, почему один сайт не учитывает переменную окружения?

EDIT: В обоих моих Startup(IHostingEnvironment env) конструкторами, я использую переменные среды:

public Startup(IHostingEnvironment env) 
{ 
    var builder = new ConfigurationBuilder() 
     .SetBasePath(env.ContentRootPath) 
     .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
     .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
     .AddJsonFile("logging.json") 
     .AddEnvironmentVariables(); // <--- 
     Configuration = builder.Build(); 
    } 
+0

только для двойной проверки - вы уверены, что ASPNETCORE_ENVIRONMENT = этап второго экземпляра, но env.EnvironmentName возвращает «Production» для него и значения из appsettings.Staging.json не используются? Кстати, вы не забудете опубликовать файл appsettings.Staging.json? – Set

+0

Я не использую 'appsettings.Staging.json' на любом сайте. ASPNETCORE_ENVIRONMENT устанавливается в машинном режиме. Запуск регистрации во втором журнале сайта: «Окружающая среда: производство». – Thaoden

+0

Вы можете проверить, что возвращает Environment.GetEnvironmentVariable («ASPNETCORE_ENVIRONMENT»)? – Set

ответ

6

Как было сказано в this similar question, трюк состоял в том, чтобы просто настроить пул приложений для загрузки пользовательских переменных (IIS -> Сервер -> Пулы приложений -> Щелкните правой кнопкой мыши по пулу -> Установить пул приложений по умолчанию ... -> Загрузить Профиль пользователя = True).

Я настроил только один из моих пулов приложений, поэтому только один из сайтов мог получить доступ к переменным среды.

+0

Я пробовал это для своей аналогичной проблемы, и это не исправляет меня. – Sam

+0

Загрузить профиль пользователя работал на меня. Спасибо. – joey

-3
public Startup(IHostingEnvironment env) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(env.ContentRootPath) 
      .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); 

     if (env.IsDevelopment()) 
     { 
      // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709 
      builder.AddUserSecrets(); 
     } 

     builder.AddEnvironmentVariables(); 
     Configuration = builder.Build(); 
    } 

Вы не могли бы добавить переменную builder.AddEnvironmentVariables();

+0

Я проверил это, он присутствует в обоих проектах , – Thaoden

+0

AddEnvironmentVariables() не изменяет значение env.EnvironmentName. Он позволяет считывать значения конфигурации из переменных среды. – Set

+0

Работает ли 'IsDevelopment()' без 'AddEnvironmentVariables()'? – Thaoden

4

Я просто провел последние пару часов работы с та же проблема. Я не уверен, будет ли результат таким же, поскольку у вас, похоже, работает одно из двух приложений.

Я установил ASPNETCORE_ENVIRONMENT в «Проведение» как системную переменную через «Дополнительные системные настройки» в Windows Server 2008 R2 и всегда попадал в среду «Производство» (которая является средой по умолчанию, если она не может найти в любом месте).

Использование «набора» из командной строки показало ожидаемые результаты «ASPNETCORE_ENVIRONMENT = Staging».

Вызов Environment.GetEnvironmentVariable ("ASPNETCORE_ENVIRONMENT") возвращен null. Я создал другую переменную под названием «Тест», которая также вернула нуль. Вызов любой другой существующей переменной возвращал ожидаемые результаты.

Я попробовал переустановить пул приложений, изменив пользователя пула приложений, перезапустив IIS с помощью консоли управления, даже перезапустив службу публикации World Wide Web (возможно, такую ​​же, как сброс в консоли IIS mgmt), все безрезультатно.

Перезагрузка сервера была единственным способом заставить приложение вернуть ожидаемый результат.

Смежные вопросы