100

Я только что обновился до Visual Studio 2010 и MVC 2.0, и я заметил, что у Web.config есть два дополнительных файла, прикрепленных к нему? Используются ли эти файлы для определения параметров отладки и выпуска, поэтому вы не загромождаете главный файл Web.config?Что такое файлы Web.Debug.config и Web.Release.Config?

Имеет ли смысл разместить строку соединения в корневом файле Web.config, если у меня есть локальный и удаленный в отладке и выпуске Web.configs соответственно?

Спасибо!

ответ

90

Это новая функция преобразования Web.config в Visual Studio 2010. More information here.


Edit:

Are these files used to specify debug and release specific settings, so you don't clutter up the main web.config?

Он не ограничивается тремя файлами, можно (теоретически) иметь столько файлов, сколько у вас есть окружение. «Верхний уровень» Web.config предоставляет шаблон вашей веб-конфигурации. Файлы под ним предоставляют значения замены, характерные для этой среды (например, если у вас разные строки подключения для локального/stage/test/whatever).

Does it even make sense to place a connection string in the root web.config file if I have have a local and remote one in the debug and release web.configs respectively.

Было бы разумно, если бы оно не изменилось между средами. Похоже, в вашем случае это так, в вашем случае нет, было бы бессмысленно оставлять его в Web.config.

+9

Эта функция наполовину запеченные, даже 4 года спустя! Он работает только при развертывании в лазурных/издательских пакетах. Вот интересная тема: http://forums.asp.net/t/1532038.aspx – theoutlander

-3

Это было что-то долгое время в VS. К сожалению, проблема с реализацией. Для примера рассмотрим следующий сценарий (VS.2010 Ultimate, все SP):

Web.Config

  • Нет ConnectionStrings разделе
  • Полное членство пользователя/Роль/и т.д.. конфигурация поставщика с использованием connectionStringName = "тест"

Web.Release.Config

  • Нет конфигурации членства (уже указано в главном web.config)
  • ConnectionStrings раздел, включая CS под названием "тест"

Web.Debug.Config

  • Нет конфигурации членства (уже указано в главном web.config)
  • ConnectionStrings раздел, включающий КС не назвал «тест»

При выполнении приложения выдает следующую ошибку:

The connection name 'test' was not found in the applications configuration or the connection string is empty.

Другими словами , поскольку элементы строки соединения находятся в файлах конструктора Release/Debug, а используется элементами конфигурации в основном файле (Web.config), он не может его решить.

+5

Справедливости ради, если у вас есть строка подключения с именем 'test' в обоих файлах конфигурации отладки и выпуска, она действительно должна быть просто основной web.config с соответствующими шаблонами. Как и вы, вы дублируете код, который, как предполагается, должен решить шаблон для вас. – R0MANARMY

+3

-1: Этот очень старый пост был полным неправильным толкованием того, как использовать преобразования веб-конфигурации. ** 1 ** На самом деле это не ответ (просто неправильная жалоба) и ** 2 ** это не простое слияние элементов, как подразумевается здесь. У вас должны быть явные команды «xslt» replace. * Хорошо сделано при получении 5 upvotes для чего-то, что добавляет к путанице об этих файлах преобразования * :) –

9

Это Интернет.конфигурационных файлов. От ASP.NET Web Deployment using Visual Studio: Web.config File Transformations:

There are two ways to automate the process of changing Web.config file settings: Web.config transformations and Web Deploy parameters. A Web.config transformation file contains XML markup that specifies how to change the Web.config file when it is deployed. You can specify different changes for specific build configurations and for specific publish profiles. The default build configurations are Debug and Release, and you can create custom build configurations. A publish profile typically corresponds to a destination environment.

1

В случае, если кто-то интересно, вот то, что я написал, чтобы иметь динамическую строку соединения на окружающую среду. Я хотел развернуть код в любой среде (Dev, Test, Pre-Prod, Prod ...), не беспокоясь об изменении строк подключения. Я не мог найти хороший способ сделать это с помощью Asp.Net MVC 4, поэтому я придумал свой собственный способ использовать файл свойств для каждой среды.

Может быть лучшее решение, я исхожу из фона Wicket/Java и недавно начал развиваться с MVC 4, поэтому возможно лучшее решение. Но вот ссылка на мой вопрос и ответ для динамической строки подключения:

Asp.net MVC 4 dynamic connection string

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