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

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

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

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

12
задан Jk1 3 June 2014 в 18:31
поделиться

6 ответов

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

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

@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

Project Properties http://img442.imageshack.us/img442/1843/propsa.jpg

14
ответ дан 2 December 2019 в 05:15
поделиться

Я использую комбинацию методов Самеха и Обаликса в .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;
        }
    }
}

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

1
ответ дан 2 December 2019 в 05:15
поделиться

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

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

0
ответ дан 2 December 2019 в 05:15
поделиться

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

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

8
ответ дан 2 December 2019 в 05:15
поделиться

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

2
ответ дан 2 December 2019 в 05:15
поделиться

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

В 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

для получения дополнительных сведений см. здесь .

4
ответ дан 2 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: