У меня есть библиотека классов, которая будет названной из нескольких отдельных исполняемых приложений. Эта библиотека классов должна знать об адресе сервера базы данных (и много других параметров конфигурации, подлинной информации, и т.д.) к доступу. У меня есть приложение конфигурирования и приложение администрирования, отдельное от библиотеки классов, которая также должна знать и установить эти параметры конфигурации.
Это быть обычной практикой для хранения их пользователь определенные параметры конфигурации в реестре Windows, или это предпочтено, чтобы использовать типичный 'App.config' XML подход для библиотеки классов и позволить инструменту конфигурирования изменять и изменять его?
Я склоняюсь к подходу реестра, но я знаю, что у многих людей есть мнения о не использовании его. Что Вы сделали бы?
В моем конкретном случае эти специфические настройки конфигурации имело больше смысла хранить в реестре. Я не могу быть уверен, что наши пользователи установят приложения в те же места, и, как минимум, мне придется хранить местоположение "главного" XML файла конфигурации в реестре, чтобы другие приложения могли его найти.
Я просто создал класс с индексом для чтения/записи настроек конфигурации в реестр как Hashtable (string ponySetting = myRegistryObject["DefaultPonySetting"]
) и назвал это делом дня. В любом случае, я ссылаюсь на основную сборку с этим классом во всех других приложениях. Huzzah
Я предпочитаю конфигурации xml настройкам реестра, потому что я могу просто создать класс и использовать xmlSerializer для открытия и сохранения прямо в мои классы.
Проверьте эту тему , чтобы получить аналогичный вопрос SO.
Лучше всего использовать файлы конфигурации XML в каталоге% appdata% пользователя.
Для этого есть ряд причин:
У вашего пользователя всегда должен быть доступ к своему собственному каталогу% appdata%. Вот пример:
строка configFilePath = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData) + "myAppConfig.config";
ExeConfigurationFileMap map = new ExeConfigurationFileMap ();
map.ExeConfigFileathname = configFileath ;
Конфигурация cfg = ConfigurationManager.OpenMappedExeConfiguration (map, ConfigurationUserLevel.None);
cfg.AppSettings.Settings.Add ("mySetting", "myValue!");
cfg. Save (ConfigurationSaveMode.Modified);
// чтобы прочитать настройку обратно
string mySetting = cfg.AppSettings.Settings ["mySetting"]. Value;
// на этом этапе mySetting = "myValue!"
Не забудьте добавить ссылку на System.Configuration v2.0.0.0 в свой проект ! Пространство имен System.Configuration по умолчанию не имеет всех требуемых классов.