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

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

Ответы [ 5 ]

11 голосов
/ 25 сентября 2008

Мне кажется, что вы можете извлечь выгоду из Visual Studio 2005 Web Deployment Project s.

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

Взгляните на эту запись в блоге Скотта Гу для быстрого обзора / образца.

3 голосов
/ 25 сентября 2008

Я большой поклонник использования 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>

2 голосов
/ 11 января 2009

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

, например

2 голосов
/ 25 сентября 2008

Скотт Хансельман предложил один из способов сделать это:

http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

1 голос
/ 25 сентября 2008

Я принял метод Жана Пола Худу изменения конфигурации. Общая идея состоит в том, чтобы иметь один или несколько TOKENIZED файлов конфигурации TEMPLATE вместо самих файлов конфигурации. Затем у вас есть задача сценария сборки, которая заменяет токены значениями из одного файла локальных свойств. Этот файл свойств содержит все различия в конфигурации и является уникальным для каждой рабочей копии.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...