Azure web.config для среды
У меня есть проект Azure (Azure 1.3) в VS2010. Есть 2 webroles, один проект веб-страницы и один проект WCF. В режиме отладки я хочу, чтобы веб-проект использовал web.config для среды DEV, а также при публикации web.config для PROD.
Каков наилучший способ сделать это?
В настоящее время я сталкиваюсь с проблемами при использовании Web.Debug.config с преобразованием XSLT. Кажется, он не работает в Azure....
Ответы
Ответ 1
Решите свою проблему по-другому. Подумайте о том, что web.config всегда статичен и никогда не меняется при работе с Azure. Что такое изменение вашего ServiceConfiguration.cscfg.
Мы создали собственный поставщик конфигурации, который сначала проверяет ServiceConfiguration.cscfg, а затем возвращается к web.config, если строка настройки/подключения отсутствует. Это позволяет нам запускать серверы в IIS/WCF непосредственно во время разработки, а затем иметь разные настройки при развертывании в Azure. Есть некоторые обстоятельства, когда вам нужно использовать web.config(да, я имею в виду WCF здесь), и в этих случаях вам нужно написать код и создать соглашение, а не хранить все в web.config. У меня есть сообщение в блоге, где я показываю пример того, как я это делал при работе с WIF (Windows Identity Foundation) и Azure.
Ответ 2
Я согласен с Мосом, отличный вопрос!
Visual Studio 2010 включает решение для этого типа проблем, преобразование web.config. Если вы посмотрите на свою веб-роль, вы заметите, что она включает Web.Debug.config и Web.Release.config вместе с традиционным web.config. Эти файлы используются для преобразования web.config во время развертывания.
Канонический пример: "Мне нужны разные строки подключения к базе данных для разработки и выпуска", но это также подходит для вашей ситуации.
В Visual Team Developer Team есть отличная запись в блоге, в которой объясняется, как использовать эту функцию (не беспокойтесь о документах MSDN, я знаю, как она работает и до сих пор не понимает документы). Проверьте http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx
Ответ 3
Мне нравится этот вопрос!
Для рабочих ролей я решил эту проблему, обнаружив среду во время выполнения и запустив мое приложение в новом AppDomain с настраиваемой конфигурацией:
- bot.cloud.config
- bot.dev.config
- bot.win.config
Это невероятно эффективный!
Я хотел бы сделать то же самое с веб-проектами, потому что использование конкретной конфигурации Azure - это много проблем:
- Оба конфигуратора не находятся в одном месте, что отнимает много времени при отладке
- Вам нужно изучить новый способ написания чего-то, что может быть стандартным.
- Иногда вы задаетесь вопросом, отменилось ли приложение на web.config из-за глупой синтаксической ошибки.
Я все еще ищу правильный способ сделать это, как в этом сообщении
Ответ 4
Еще одно возможное решение - иметь два проекта CloudService, каждый из которых имеет определенный ServiceConfiguration.cscfg(dev/prod). Разработайте с помощью Dev, но разверните Prod.
Ответ 5
В настоящее время я сталкиваюсь с проблемами при использовании Web.Debug.config с преобразовать XSLT. Кажется, он не работает в Azure....
Это зависит от того, хотите ли вы заставить его работать на вашей локальной машине или внутри непрерывной интеграции.
- Для локальной машины я попытался ответить здесь: fooobar.com/info/158523/...
- Для непрерывного интегрирования это еще проще. Когда вы строите из командной строки с указанием значения свойства Configuration, ваши конфигурации будут преобразованы (независимо от того, что они делают, когда вы строите внутри VS). Поэтому правильное определение конфигураций сборки для облачного и веб-проекта даст вам правильный результат в зависимости от параметров сборки.