2010-12-29 3 views
0

Я писал C# exe, который будет работать на реальном веб-сервере, но я хочу проверить его на нашем промежуточном сервере. Поскольку у промежуточного сервера разные настройки базы данных (в app.config) из моего localhost, есть ли способ сохранить строку подключения вне app.config, чтобы я мог легко добраться до нее?Хранение настроек базы данных за пределами app.config

Кроме того, можно ли сохранить строку подключения к базе данных, затем получить к ней доступ через app.config? Это может показаться странным, но я использую dll из CMS, который использует значение в файле .config.

+0

Почему нет разных файлов app.config для каждой среды? Это, по сути, точка файла конфигурации, чтобы обеспечить параметры, необходимые для этой среды. – David

ответ

2

Вы можете «экстернализации» любой раздел конфигурации .NET в отдельный файл, и ссылаться на него app.config.

Так что в вашем случае, вы бы что-то подобное в app.config:

<connectionStrings configSource="connectionstrings.dev.config" /> 

, а затем создавать отдельные конфиги для, например, DEV, TEST, PROD с разными именами. Их содержание было бы:

<?xml version="1.0"?> 
<connectionStrings> 
    -- your connection string here, as normal 
</connectionStrings> 

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

+0

Итак, у меня есть мой app.config с настройками конфигурации, указывающими на другой файл. Можно ли изменить app.config на каждой машине, на которой я запущен, без повторного создания приложения один раз для каждой машины? –

4

Как насчет использования различных app.config в каждом месте?

+0

Возможно ли сохранить app.config вне .exe? Когда я сделал свою сборку (TFS), похоже, что app.config не выглядит так же, как с web.config –

+2

Это то, что я обычно делаю. Чтобы избежать ошибок, поддерживайте оба конфигурационных файла в исходном элементе управления, используя разные имена и местоположение за пределами того, что вы развертываете, и сделайте так, чтобы ваш сценарий развертывания автоматически установил правильный вариант как часть процесса обновления. – tdammers

0

Вы можете сохранить его там, где хотите: в текстовом файле в переменной окружения передать его как аргумент командной строки.

Вам просто нужно написать код, чтобы прочитать строку подключения и передать ее в ваш файл данных.

Когда вы сообщаете нам, как вы обращаетесь к своей базе данных, я могу показать вам, как передать строку соединения.

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

0

Это зависит от того, как вы его используете. Это просто строка, поэтому в основном вы можете хранить ее в любом месте, но если вы используете какую-либо библиотеку, которая ожидает, что строка подключения будет в app.config, вам придется найти другой способ подачи строки на нее.

Файл app.config, однако, легко добраться. Это всего лишь текстовый файл в формате XML, поэтому вы можете редактировать его с помощью любого текстового редактора, например, «Блокнот». Он не называется app.config после его развертывания, хотя он получает его имя файла от имени приложения, с расширением .config.

1

Вместо этого, как насчет создания настроек базы данных в app.config с префиксами, такими как DevConnectionString и ProdConnectionString. Затем создайте еще один элемент , в котором указывается, в какой среде вы находитесь.

Во время разработки эта настройка среды «Dev». При развертывании кода измените элемент среды в app.config на «Prod».

Если вы хотите получить настройки базы данных в коде, сначала проверьте значение среды, а затем соответствующим образом выберите параметры базы данных.

Одним из вариантов этой темы является создание переменной среды в Windows на каждой машине и опрос ее в коде.

0

Вы можете скопировать собственную конфигурацию для строк подключения, вызвать ее в соответствии с текущей средой, например. dev.config, qa.config, prod.config и т. д. и сохраните его имя в App.config.

Кроме того, вы можете добавить запись в Machine.config, например. называется окружающая среда и рассматривать его на чтение App.config для определения среды конфигурации, то есть:

Machine.config:

<environment name="Dev" /> 

App.конфиг:

<environments> 
    <environment name="Dev" config="dev.config" /> 
    <environment name="QA" config="qa.config" /> 
    ... 
</environments> 
Смежные вопросы