我的情景
我有一个将从多个单独的可执行应用程序中调用的类库。此类库需要知道要访问的数据库服务器的地址(以及许多其他配置选项、身份验证信息等)。我有一个与类库分开的配置和管理应用程序,它也需要知道和设置这些配置选项。
我的问题
将这些用户特定的配置选项存储在 Windows 注册表中是常见的做法,还是更喜欢对类库使用典型的“App.config”XML 方法并允许配置工具对其进行更改和修改?
我倾向于使用注册表方法,但我知道很多人对不使用它有意见。你会怎么办?
我有一个将从多个单独的可执行应用程序中调用的类库。此类库需要知道要访问的数据库服务器的地址(以及许多其他配置选项、身份验证信息等)。我有一个与类库分开的配置和管理应用程序,它也需要知道和设置这些配置选项。
将这些用户特定的配置选项存储在 Windows 注册表中是常见的做法,还是更喜欢对类库使用典型的“App.config”XML 方法并允许配置工具对其进行更改和修改?
我倾向于使用注册表方法,但我知道很多人对不使用它有意见。你会怎么办?
最佳做法是使用用户的 %appdata% 目录中的 XML 配置文件。
有许多的原因:
您的用户应该始终可以访问他们自己的 %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 命名空间没有所有必需的类。
我更喜欢 xml 配置而不是注册表设置,因为我可以简单地创建一个类并使用 xmlSerializer 打开并直接保存到我的类中。
检查此主题以获取类似的 SO 问题。
在我的具体情况下,这些特定的配置设置更适合存储在注册表中。我不能肯定我们的用户会将应用程序安装到相同的位置,至少,我必须将“主”配置 XML 文件的位置存储在注册表中,以便其他应用程序可以找到它.
我只是创建了一个带有索引的类,可以像 Hashtable ( ) 一样将配置设置读/写到注册表string ponySetting = myRegistryObject["DefaultPonySetting"],然后就结束了。无论如何,我在所有其他应用程序中都引用了这个类的主程序集。胡扎
我肯定不会使用注册表,但对于简单的应用程序范围的设置,我只需将我自己的 XML 文件滚动到与 EXE 相同的位置并使用我自己的类来访问它。对于这种事情,.NET 中的设置处理方式过于复杂,现在甚至不如以前那么糟糕了。