Как изменить строку подключения для разных рабочих мест - PullRequest
4 голосов
/ 08 февраля 2010

Я работаю над проектом C # 4.0, WPF 4.0, SQL 2008 и работаю дома и в офисе. Я просто настраиваю SubVersion с помощью Visual SVN в соответствии с рекомендациями, которые встречаются в других вопросах. Проблема, с которой я сталкиваюсь, заключается в том, что строка подключения к базе данных отличается для каждого местоположения.

Дома у меня есть база данных в моей системе разработки, в офисе база данных находится на нашем сервере. Ни один из них не подключен к Интернету, поэтому я должен использовать оба. Есть ли элегантный способ автоматически выбрать правильный?

Обновление

У меня постоянные проблемы с этим, и я пытаюсь сбалансировать обучение управлению версиями с выполнением работы над моим проектом. Я читал книгу подрывной деятельности, и я в порядке с тем, что она охватывает. Одна из моих реальных проблем связана с файлами, которые должны различаться в разных средах разработки . Я мог бы легко обойти это, но мне это кажется немного странным. Я вижу больше, чем пару статей о том, насколько странным может быть svn: exclude, и мне кажется, что то, что работает дома, вызывает проблемы на работе и наоборот.

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

Спасибо, ТАК

Ответы [ 7 ]

4 голосов
/ 09 февраля 2010

Если вы действительно хотите полностью автоматизировать это, вы можете сделать что-то вроде этого:

Во-первых, сохраните настройки для различных сред в системе контроля версий, но не фактический файл конфигурации. Например:

configfiles\app.config.mikeb_home
configfiles\app.config.local
configfiles\app.config.development
configfiles\app.config.staging
configfiles\app.config.production

Затем в вашей конфигурации сборки вы можете добавить шаг, чтобы скопировать правильный файл конфигурации в ваш корневой app.config. Например. с «событием предварительной сборки» (сценарий командной строки), основанным на параметрах «среды» (имя компьютера, имя пользователя, ...). Вероятно, вы можете добиться того же, добавив несколько команд msbuild в файл .csproj.

Однако стоит ли все это того? TortoiseSVN имеет функцию, называемую списком «игнорировать при фиксации», которая помогает предотвратить случайную фиксацию локально измененного файла, который не следует фиксировать (в диалоговом окне фиксации щелкните правой кнопкой мыши файл => Переместить в список изменений - > игнорируй-на-коммит). Может быть немного раздражает, если вам действительно нужно изменить что-то еще в файле .config, но все же.

3 голосов
/ 08 февраля 2010

Разве вы не можете изменить .config дома и не проверить изменение строки подключения обратно?

Хранение информации о строке подключения в коде является плохой практикой (любой может использовать ildasm.exe и просмотреть всестроки в вашем коде).

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

Кроме того, .NET поддерживает шифрование раздела строки подключения при необходимости.

3 голосов
/ 08 февраля 2010

Простой: не помещайте строку подключения в код, читайте ее где-нибудь из данных конфигурации. А потом просто не помещайте эти данные конфигурации в Subversion.

В приложении, над которым я сейчас работаю, мы храним информацию о строке подключения в реестре Windows, в папке HKLM \ Software \ [OurProduct] \ Database.

1 голос
/ 12 февраля 2010

Я думаю, что идеальным решением было бы использовать что-то вроде преобразования web.config , которые добавляются в Visual Studio 2010. К сожалению, насколько я могу судить, они доступны только для файлов web.config. .

0 голосов
/ 09 февраля 2010

.NET имеет возможность переопределения настроек в одном файле конфигурации с настройками в другом, используя атрибут file. Обычно мы делаем что-то вроде этого:

web.config

<configuration>
    <appSettings file="web.custom.config">
        <!-- your default settings here -->
    </appSettings>
</configuration>

web.custom.config

<appSettings>
    <!-- override stuff from root web.config here here -->
</appSettings>

По соглашению, мы настроили нашу систему управления исходным кодом [SVN] на игнорирование любых файлов custom.config. Это позволяет нам зарегистрировать настройки ядра по умолчанию, но при этом каждый разработчик может управлять настройками среды.

Примечание: это работает только с клавишей <appSettings>. Если вы храните строки подключения в ключе <connectionStrings>, рассмотрите возможность перемещения этих настроек в appSettings.

См. http://msdn.microsoft.com/en-us/library/ms228154.aspx

0 голосов
/ 08 февраля 2010

вы можете использовать настройки для определения более одной строки подключения. просто дважды щелкните Settings.settings в Обозревателе решений-> Проект-> Свойства. тогда вы увидите поле со списком настроек. выберите ConnectionString, затем введите connstr.

тогда вы можете получить connstr с кодом ниже

using System.Configuration;

using test.Properties;

namespace test{
public partial class mainForm : Form{

   public mainForm()

    {
        InitializeComponent();            

    }

    private void mainForm_Load(object sender, EventArgs e)
    {
        string connectionStr = ConfigurationManager.ConnectionStrings[this_index_is_up_to your_algorithm].ToString();
    }
}

}

0 голосов
/ 08 февраля 2010

В управлении исходным кодом используйте строку подключения в app.config, которая используется для наиболее часто используемой строки подключения (вероятно, будет работать).

Дома перехватите (или извлеките) файл, который выбирает, какую строку подключения использовать, и отредактируйте ее для использования строки домашнего подключения.

...