Несколько приложений, общие настройки: использовать реестр или конфигурацию на основе XML? - PullRequest
6 голосов
/ 03 февраля 2010

Мой сценарий

У меня есть библиотека классов, которая будет вызываться из нескольких отдельных исполняемых приложений. Эта библиотека классов должна знать адрес сервера базы данных (и многие другие параметры конфигурации, информацию об аутентификации и т. Д.) Для доступа. У меня есть приложение для конфигурирования и администрирования, отделяющее от библиотеки классов, которое также должно знать и установить эти параметры конфигурации.

Мой вопрос

Является ли обычной практикой сохранение этих пользовательских параметров конфигурации в реестре Windows, или , если предпочитается использовать типичный подход App.config XML для библиотеки классов и использовать инструмент конфигурации изменить и изменить его?

Я склоняюсь к подходу к реестру, но я знаю, что многие люди придерживаются мнения о том, чтобы его не использовать. Что бы вы сделали?

Ответы [ 4 ]

5 голосов
/ 02 марта 2010

Рекомендуется использовать файлы конфигурации XML в пользовательском каталоге% appdata%.

Для этого есть несколько причин:

  1. Скорее всего, ваше приложение будет установлено в Program Files. Если пользователь не предоставил (или не предоставил) административные права на процесс вашего приложения, вы не сможете записать в файл.
  2. Я работал в частично доверенных средах, где доступ к реестру просто не возможен. Клиент полностью отключил разрешения реестра для среды выполнения .NET на этом сервере.
  3. Ваш пользователь всегда должен иметь доступ к своему собственному каталогу% appdata%. Вот пример:

    string configFilePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "myAppConfig.config";
    ExeConfigurationFileMap map = new ExeConfigurationFileMap();
    map.ExeConfigFilename = configFilePath;
    Configuration cfg = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
    cfg.AppSettings.Settings.Add("mySetting", "myValue!");
    cfg.Save(ConfigurationSaveMode.Modified);
    
    // to read the setting back
    
    string mySetting = cfg.AppSettings.Settings["mySetting"].Value;
    // at this point, mySetting = "myValue!"
    

Не забудьте добавить ссылку System.Configuration v2.0.0.0 в ваш проект! Пространство имен System.Configuration по умолчанию не содержит всех необходимых классов.

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

Я предпочитаю настройки xml настройкам реестра, потому что я могу просто создать класс и использовать xmlSerializer для открытия и сохранения прямо в мои классы.

Проверьте в этой теме для аналогичного вопроса SO.

0 голосов
/ 28 сентября 2010

Я бы точно не использовал реестр, но для простых настроек в масштабе приложения я просто свернул свой собственный XML-файл в то же место, что и EXE, и использовал свои собственные классы для доступа к нему.Для такого рода вещей обработка настроек в .NET слишком сложна, и теперь она не так плоха, как раньше.

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

В моем конкретном случае эти конкретные настройки конфигурации имеют больше смысла для хранения в реестре. Я не могу быть уверен, что наши пользователи будут устанавливать приложения в тех же местах, и, по крайней мере, мне нужно будет сохранить местоположение «главного» XML-файла конфигурации в реестре, чтобы другие приложения могли найти его .

Я просто создал класс с индексом для чтения / записи параметров конфигурации в реестр, например, Hashtable (string ponySetting = myRegistryObject["DefaultPonySetting"]), и назвал его днем. В любом случае я ссылаюсь на основную сборку с этим классом во всех других приложениях. * Возгласы ликования 1004 *

...