Управление строкой соединения отладки и выпуска - PullRequest
12 голосов
/ 05 марта 2010

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

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

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

Ответы [ 9 ]

14 голосов
/ 05 марта 2010

Создайте версию файла 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

8 голосов
/ 05 марта 2010

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

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

4 голосов
/ 05 марта 2010

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

В 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

для более подробной информации, проверьте это .

2 голосов
/ 05 марта 2010

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

1 голос
/ 05 марта 2010

Я использую комбинацию метода Самеха и Обаликса в .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, но код ищет только строку на основе того, как она была построена. Это позволяет мне иметь (если мне нужно) один файл конфигурации для всех сборок, но в действительности я не развертываю файлы конфигурации в процессе сборки. Хотя условное приложение app.Relase.config для .net 4 выглядит как правильный путь в будущем.

0 голосов
/ 07 июня 2019

Когда вы откроете веб-проект, вы получите из коробки 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>

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

0 голосов
/ 23 марта 2018

С 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

0 голосов
/ 07 июня 2012

Я могу сказать другое решение для этой проблемы. В файле 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 написано две версии для выпуска и отладки.

0 голосов
/ 05 марта 2010

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

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

...