Управление строкой подключения отладки и выпуска

Что такое хороший подход к управлению строкой подключения отладки и выпуска в приложении .NET/SQLServer?

У меня есть два SQL-сервера, создание и сборка/отладка, и мне нужен способ переключения между ними при развертывании моего приложения ASP.NET.

В настоящее время я просто храню их в файле web.config и комментирую один или другой, однако это связано с ошибкой при развертывании.

Ответ 1

Создайте версию Debug и Release файла Web.config, например. Web.debug.config и Web.release.config. Затем добавьте условие предварительной компиляции, которое копирует соответствующую версию в файл web.config на основе текущего целевого объекта.

Изменить:. Чтобы добавить условие предварительной компиляции, щелкните правой кнопкой мыши на проекте и выберите "Свойства", затем перейдите на вкладку "Сборка событий" и добавьте код ниже в условие прекомпиляции. Очевидно, вам придется изменить код в соответствии с вашими потребностями, см. Изображение ниже.

@echo off

echo Configuring web.config pre-build event ...

if exist "$(ProjectDir)web.config" del /F / Q "$(ProjectDir)web.config"

if "$(ConfigurationName)" == "Debug Test" goto test
if "$(ConfigurationName)" == "Debug M" goto M
if "$(ConfigurationName)" == "Debug BA" goto BA
if "$(ConfigurationName)" == "Release Test" goto test
if "$(ConfigurationName)" == "Release M" goto M
if "$(ConfigurationName)" == "Release BA" goto BA

echo No web.config found for configuration $(ConfigurationName). Abort batch.
exit -1
goto :end

:test
copy /Y "$(ProjectDir)web.config.test" "$(ProjectDir)web.config"
GOTO end

:BA
copy /Y "$(ProjectDir)web.config.BA" "$(ProjectDir)web.config"
GOTO end

:M
copy /Y "$(ProjectDir)web.config.M" "$(ProjectDir)web.config"
GOTO end

:end
echo Pre-build event finished

Свойства проекта http://img442.imageshack.us/img442/1843/propsa.jpg

Ответ 2

Хорошей новостью является то, что .NET4 имеет условие только для этого, у вас могут быть отдельные конфигурации для каждой конфигурации (web.Release.config, web.Debug.config).

Плохая новость: вы, вероятно, еще не используете это.

Ответ 3

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

В Visual Studio вы заметите, что инструкции тускнеют исключительно в соответствии с конфигурацией проекта (отладка или выпуск).

Просто добавьте в код что-то вроде следующего:

string myConnectionString;
#if DEBUG
     myConnectionString = "your debug connection string";//may be read from your debug connection string from the config file
#else
     myConnectionString = "your release connection string"; //may be read from your relase connection string from the config file
#endif

для более подробной информации, this.

Ответ 4

Обычно я устанавливаю переменную среды на своих производственных серверах, что означает, что сервер является производственным сервером. Затем я прочитал правильную строку соединения из моего web.config на основе того, существует ли эта переменная среды и установлена ​​производственная стоимость.

Ответ 5

Я использую комбинацию метода Sameh и Obalix в .net 3.5.

    public static class DataConnection
{
#if LOCALDEV
    public const string Env = "Debug";
#endif
#if STAGING
    public const string Env="Staging";
#endif
#if RELEASE
    public const string Env="Release";
#endif
    private static ConnectionStringSettingsCollection _connections;
    static DataConnection()
    {
        _connections = ConfigurationManager.ConnectionStrings;

    }

    public static string BoloConnectionString
    {
        get
        {
            return _connections["DB1."+Env].ConnectionString;
        }
    }
    public static string AOAConnectionString
    {
        get
        {
            return _connections["DB2."+Env].ConnectionString;
        }
    }
    public static string DocVueConnectionString
    {
        get
        {
            return _connections["DB3."+Env].ConnectionString;
        }
    }
}

Затем в моих свойствах проекта я определяю правильные условные символы компиляции. Таким образом, мне не нужно держать строки подключения жестко закодированными, как Sameh's, но код ищет только строку, основанную на том, как она была построена. Это позволяет мне (если мне нужно) один файл конфигурации для всех сборок, но на самом деле я не развертываю файлы конфигурации в моем процессе сборки. Хотя условный файл app.Relase.config для .net 4 выглядит как правильный путь в будущем.

Ответ 6

Ну, может быть, это немного устарело, но ODBC DSN решает эту проблему достаточно хорошо - я все еще использую - с строгостью - - Настройки DNS, чтобы различать производственные и отладочные среды.

p.s., я ожидаю загрузки пустых голосов, возможно, это будет индикатором того, что люди думают об уровне косвенности для идентификаторов базы данных.

Ответ 7

Я могу сказать другое решение для этой проблемы. В файле csproj создайте файл:

<Content Include="DB.config">
  <SubType>Designer</SubType>
</Content>
    <Content Include="DB.Debug.config">
  <DependentUpon>DB.config</DependentUpon>
  <SubType>Designer</SubType>
</Content>
    <Content Include="DB.Release.config">
  <DependentUpon>DB.config</DependentUpon>
  <SubType>Designer</SubType>
</Content>

В xml написанном наборе две версии для выпуска и отладки.

Ответ 8

Начиная с 2018 года для более новых версий Visual Studio Microsoft приняла расширение SlowCheetah. Установка этого даст вам возможность разбить файл app.config на три отдельных файла. Одним из них является базовый файл с кодом, который всегда применяется, а затем вы получите файл app.debug.config и файл app.release.config.

Обратите внимание, что использование этого проекта в качестве пакета NuGet недостаточно. Если вы хотите использовать пункт меню Visual Studio UI, вам нужно скачать установщик с сайта ниже и запустить его. Затем установите SlowCheetah специально для любых проектов, которые вы хотите использовать при использовании NuGet.

Также обратите внимание, что оригинальная программа SlowCheetah первоначального разработчика все еще существует, но используйте ту, что была опубликована Microsoft для более новых версий Visual Studio.

https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.SlowCheetah-XMLTransforms

Add Transform

Split Config

Ответ 9

Когда вы откроете веб-проект, вы получите 2 дополнительных файла Web.Config из коробки - Web.Debug.config & Web.Release.config.

  1. Добавьте желаемую строку подключения в эти файлы с атрибутами XSLT xdt: Transform = "SetAttributes" xdt: Locator = "Match (name)"

  2. Отредактируйте ваш csproj и добавьте следующую цель:

На втором шаге будет выполнено преобразование в каждой сборке (в соответствии с вашей активной конфигурацией), а не только при публикации, что даст вам лучший опыт отладки. Я узнал об этом из этого поста.

Ответ 10

Когда вы откроете веб-проект, вы получите 2 дополнительных файла Web.Config из коробки - Web.Debug.config & Web.Release.config.

1. Добавьте желаемую строку подключения к этим файлам с атрибутами XSLT xdt: Transform = "SetAttributes" xdt: Locator = "Match (name)"

<connectionStrings>
  <add name="myConnectionString" connectionString="myConnectionString" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</connectionStrings>"

2. Отредактируйте ваш csproj и добавьте цель TransformXml:

<Target Name="TransformActiveConfiguration" Condition="Exists('$(ProjectDir)/Web.$(Configuration).config')" BeforeTargets="Compile" >
    <TransformXml Source="$(ProjectDir)/Web.Config" Transform="$(ProjectDir)/Web.$(Configuration).config" Destination="$(TargetDir)/Web.config" />
</Target>

На втором шаге будет выполнено преобразование в каждой сборке (в соответствии с вашей активной конфигурацией), а не только при публикации, что даст вам лучший опыт отладки. Я узнал об этом из этого поста.