Лучший способ переключения конфигурации между средами разработки /UAT/Prod в ASP.NET?

Мне нужно переключаться между 3-мя средами при разработке моего веб-приложения - Development, UAT и Prod. У меня есть разные подключения к базе данных в моих конфигурационных файлах для всех 3. Я видел, как эти настройки выполнялись вручную, изменяя все ссылки, а затем перестраивая решение, а также выполняя директивы препроцессора. Есть ли простой способ сделать это на основе некоторой переменной, чтобы конфигурация не нуждалась в пересмотре при каждом новом развертывании в новой среде?

Ответ 1

Мне кажется, что вы можете воспользоваться проектом Visual Studio 2005 Web Deployment Project.

С этим вы можете сообщить об этом, чтобы обновить/изменить разделы вашего файла web.config в зависимости от конфигурации сборки.

Взгляните на эту запись в блоге от Scott Gu для быстрого обзора/примера.

Ответ 2

Я большой поклонник использования MSBuild, в частности задач сообщества MSBuild (http://msbuildtasks.tigris.org/), и есть задача XSLT для преобразования web.config с соответствующими настройками строки подключения и т.д.

Я сохраняю эти задачи удобными:

<Target Name="Configs">
<Xslt RootTag="" Inputs="web.config" Output="Web.$(COMPUTERNAME).config" Xsl="web.config.$(COMPUTERNAME).xslt" Condition="Exists('web.config.$(COMPUTERNAME).xslt')" />

  

Очевидно, что это не 100%, что вам нужно, так что каждый разработчик может иметь свой собственный web.config.

Но нет причин, по которым вы не могли бы использовать приведенный выше принцип, чтобы иметь несколько конфигураций сборки, которые применяют правильный XSLT.

Мой XSLT выглядит так:

<?xml version="1.0" encoding="utf-8"?>

  

<!-- Dev -->
<xsl:template match="/configuration/connectionStrings/add[@name='MyConnectionString']/@connectionString">
    <xsl:attribute name="connectionString">Data Source=MyServer;Initial Catalog=MyBD;User ID=user;password=pwd</xsl:attribute>
</xsl:template>
<xsl:template match="node()">
    <xsl:copy>
        <xsl:apply-templates select="@*"/>
        <xsl:apply-templates/>
    </xsl:copy>
</xsl:template>

Ответ 4

Вы всегда можете использовать NAnt + NAnt.Contrib для изменения web.config во время сборки. NAnt имеет задачи xmlpeek и xmlpoke, которые позволяют вам обновлять xml файлы.

например.

< xmlpoke file = "$ {dist.dir}/Web.config"                xpath = "/configuration/applicationSettings/MyProj.Web.Properties.Settings/setting [@name = 'MyProj_Web_Service']/value"                value = "http://${AppServer}/Service.asmx" / >

Ответ 5

Я принял метод Jean Paul Boodhoo изменения конфигураций. Общая идея состоит в том, чтобы вместо одного файла конфигурации иметь один или несколько файлов TOXENIZED конфигурации TEMPLATE. Затем у вас есть задача сборки script, которая заменяет маркеры значениями из файла локальных свойств SINGLE. Этот файл свойств содержит все различия в конфигурации и уникален для каждой рабочей копии.

Эта система отлично поработала для меня, и как только изначально настройка - это легкий способ управления изменениями среды.