Как создать общий файл Web.config и набор конкретных файлов Web.config? - PullRequest
2 голосов
/ 16 февраля 2011

Контекст

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

В трех случаях конфигурация (Web.config) может отличаться . Например, в средах разработчиков и тестеров используется тестирование SQL Server, тогда как в производственной среде осуществляется доступ к другому SQL Server, поэтому в этих случаях строка подключения отличается.

Мы хотим сохранить три версии Web.config в подрывной деятельности. Но модифицировать каждый из трех файлов каждый раз, когда нам нужно добавить, удалить или изменить общий параметр, раздражает: было бы неплохо иметь общий главный файл Web.config, который будет наследоваться каждым из трех веб-узлов. файлы конфигурации .

Вопрос

Как настроить проект ASP.NET, который будет использовать главный файл конфигурации и разные файлы конфигурации ведомого на разных машинах, таким образом, совместно используя один и тот же проект / исходный код / ​​файлы конфигурации в Subversion?

Если .NET Framework не может этого сделать, каковы альтернативы (чтобы не изобретать велосипед и / или посмотреть, как он работает, если необходимо создать собственное решение)?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

Если бы я начинал сегодня, то особенность преобразования web.config в VS 2010 определенно стоит посмотреть.Но мне пришлось решить эту проблему до того, как поддержка инструмента была доступна, и я также думаю, что преобразования хороши, но иногда они просто не отрезают горчицу - особенно если у вас много вещей, сильно управляемых конфигурацией или производственных конфигураций, которые могут изменитьсябез того, чтобы команда разработчиков не знала об этом.

Как мы справляемся с этим, так это хранить отдельные копии конфигураций.Тот, который хранится в корне проекта, предназначен для нашей стандартизированной среды разработки.Он также задается как файл содержимого, который не копируется в выходную папку.Окружающие среды хранятся вне проекта с точки зрения визуальной студии, но все еще в одном и том же элементе управления версиями, в папке для каждой среды и фасета (у нас много веб-приложений с несколькими заголовками и отдельными инструментами администратора).Мы связываем все это вместе с помощью сценария сборки, который копирует правильные конфигурации в зависимости от объявленной среды.

Мы обнаружили, что это работает немного лучше, чем преобразования на практике - главное, чтобы производственные конфигурации были такимиРазница в том, что, возможно, здесь больше преобразований, чем конфигураций.Также позволяет нам синхронизировать производственную конфигурацию, так как на самом деле это просто копия файла, а не обновление какого-то ужасного XSLT.

2 голосов
/ 16 февраля 2011

Visual Studio 2010 имеет эту функцию, называемую «преобразования web.config».У вас есть базовый web.config, затем для каждой конфигурации у вас есть файлы преобразования, которые эффективно «редактируют» базовый web.config для конкретной среды.

Пример из файла Web.Debug.config по умолчанию:

<?xml version="1.0"?>

<!-- For more information on using web.config transformation
  visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of 
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
    finds an atrribute "name" that has a value of "MyDB".

    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <!--
      In the example below, the "Replace" transform will replace the entire 
      <customErrors> section of your web.config file.
      Note that because there is only one customErrors section under the 
      <system.web> node, there is no need to use the "xdt:Locator" attribute.

      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
</configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...