2012-01-05 5 views
1

Каков рекомендуемый способ, позволяющий приложению ASP.NET знать, в какой среде он работает? Мое приложение может работать в таких условиях:Как настроить среду приложения ASP.NET?

  • Отладка в Visual Studio
  • Автоматизированная система испытаний
  • развертывания на промежуточном сервере
  • развертывания на сервере

В каждом из в этих средах приложение нуждается в некоторой конфигурации. Основное различие между средами заключается в том, какие параметры подключения к базе данных использовать, но есть и другие отличия.

Это то, что я пробовал:

  • Я попытался с помощью опции «конфигурации» в Visual Studio. По умолчанию есть два: Release и Debug. Я попытался заменить эти два идентификаторами для моих четырех сред. Эти конфигурации затем могут использоваться для применения преобразования к файлу Web.config. Проблема в том, что выбор конфигурации происходит во время сборки, и я хотел бы скомпилировать мое приложение, а затем выбрать среду перед ее запуском на веб-сервере. Преобразование Web.config также не происходит при отладке внутри Visual Studio, поэтому вместо того, чтобы сообщать приложению, что он работает в среде отладки, он не получает среды. Я нашел обходной путь в Use Visual Studio web.config transform for debugging, но он не работает нормально. Мне нужно изменить конфигурацию в свойствах проекта, что является медленным процессом.
  • Я попытался использовать переменную окружения. Таким образом, я мог бы установить переменную MYAPP_ENV = dev извне приложения, и я мог бы прочитать ее на C# как
    string env = System.Environment.GetEnvironmentVariable ("MYAPP_ENV");
    Но тогда я не уверен, как установить эту переменную среды из Visual Studio и изнутри IIS. Я не могу установить его глобально на машине, потому что тот же компьютер должен иметь возможность запускать приложение в нескольких средах.

Итак, как рекомендуемый способ сделать это в ASP.NET? В Ruby on Rails я бы использовал переменную среды RAILS_ENV, а в PHP я бы включил файл, который не был проверен в репозитории и добавлен в список игнорирования системы управления версиями.

+0

Это не ясно, если вы делаете это, но я хотел бы попробовать воздержаться от использования (например, 'if env ==" dev "{} else {}', потому что ваш сайт ведет себя по-разному в разных средах. Любые значения, которые необходимо изменить, должны быть изменены в файлах конфигурации (см. ответ AaronS). – Jeff

ответ

3

У меня были бы отдельные файлы web.config для каждой вашей среды.

В качестве альтернативы вы также можете создать что-то похожее на то, что вы сделали с файлом PHP, добавив внешний файл конфигурации.

Просто добавьте следующее в свой web.config.

<appSettings file="MySettings.config"> 

Затем добавьте новый файл MySettings.config, который содержит остальную информацию о вашей конфигурации.

+0

+1. Чтобы помочь поддерживать отдельные web.configs, я рекомендую воспользоваться [конфигурационными преобразованиями] (http://msdn.microsoft.com/en-us/library/dd465318.aspx) в Visual Studio. – Keith

+0

AronS: Звучит интересно. Как настроить Visual Studio для автоматического добавления одного значения в файл MySettings.config перед запуском моего приложения при запуске отладки (F5)? И будет ли этот файл MySettings.config рядом с DLL с моим приложением, когда я его развертываю на IIS на производстве? Keith: Как я изначально писал, похоже, что преобразование может быть сделано только как часть процесса сборки, и есть другие осложнения, которые, похоже, не работают эффективно. –

+0

Что бы вы сделали, похоже на то, как вы настроили свою версию PHP. Просто сохраните этот файл в каждой из ваших сред, и ваш инструмент развертывания игнорирует его. На самом деле я имею несколько версий моего web.config в подпапке, переименованную для каждой среды (web.config.QA, web.config.Prod и т. Д.). Затем мой процесс сборки и развертывания выбирает правильный, на основе которого выполняется сборка, переименовывает его в web.config и затем заменяет собой тот, который находится в корне, по мере развертывания сайта. Это сработало очень хорошо для меня. – AaronS

1

Файл web.config используется для экологических конфигураций. Если вы обнаружите, что конфигурация в визуальных студиях слишком громоздка, вы можете просто оставить файл вне контроля версий и отредактировать его для каждой среды.в <AppSettings> узла вы можете добавить ключи:

<appSettings> 
    <add key="Environment" value="DEV" /> 
</appSettings> 

Затем вы можете получить доступ к этим значения с помощью класса ConfigurationManager

var currentEnvironment = ConfigurationManager.AppSettings["Environment"].ToString(); 
+0

Не было бы смысла иметь весь web.config вне контроля версий или иметь одну версию для каждой среды, так как есть много вещей, которые должны быть в файле, но на самом деле это не среда или связанные с конфигурацией. –

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