Что хороший подход к управлению строкой подключения отладки и выпуска в.NET / приложение SQLServer?
У меня есть два SQL Server, производство и сборка/отладка, и мне нужен метод переключения между двумя, когда мое приложение ASP.NET развертывается.
В настоящее время я просто храню их в web.config и комментирую один или другой, однако который подвержен ошибкам при развертывании.
Создайте 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
Я использую комбинацию методов Самеха и Обаликса в .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 выглядит правильным путем в будущем.
Ну, возможно, это немного устарело, но ODBC DSN решает эту проблему довольно хорошо - я до сих пор использую - со строгостью - настройки DNS, чтобы различать производственную среду и среду отладки.
p.s., Я ожидаю множества голосов против, возможно, это будет мерой того, что люди думают об уровне косвенного обращения к идентификаторам базы данных.
Хорошая новость в том, что в .NET4 есть положение для этого, вы можете иметь отдельные конфиги для каждой конфигурации (web.Release.config, web.Debug.config).
Плохая новость в том, что ... вы, вероятно, еще не используете это.
Обычно я устанавливаю переменную окружения на своих производственных серверах, которая обозначает, что сервер является производственным. Затем я считываю правильную строку подключения из моего web.config, основываясь на том, существует ли эта переменная окружения и установлена ли она в производственное значение.
Использовать препроцессор директивы: когда ваш проект настроен для работы в режиме отладки, будет выбрана строка подключения отладки, в противном случае строка подключения выпуска будет выбрана автоматически.
В 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
для получения дополнительных сведений см. здесь .