保持C#应用程序设置/配置的最佳实践
我正在努力解决如何持久化我的C#应用程序读取并更新的首选项/设置/配置的问题。我的配置可以是保持C#应用程序设置/配置的最佳实践,c#,mysql,entity-framework,application-settings,configuration-management,C#,Mysql,Entity Framework,Application Settings,Configuration Management,我正在努力解决如何持久化我的C#应用程序读取并更新的首选项/设置/配置的问题。我的配置可以是 表示连接字符串、目录名、文件名等的单个整数、字符串、字节[] 字符串或其他值类型的集合 类对象实例,这些实例表示一组主要是值类型 ->这些设置在不同的、有时不相关的类中访问 鉴于以下要点,我目前正在思考您认为什么是最佳实践: 自写的键/值存储。在内部,键/值存储在哈希表中,哈希表被序列化/反序列化以实现持久性 实体框架:我可以访问MS实体框架并运行MySQL服务器实例 文本文件/XML文件 还有其
- 表示连接字符串、目录名、文件名等的单个整数、字符串、字节[]
- 字符串或其他值类型的集合
- 类对象实例,这些实例表示一组主要是值类型
- 自写的键/值存储。在内部,键/值存储在哈希表中,哈希表被序列化/反序列化以实现持久性
- 实体框架:我可以访问MS实体框架并运行MySQL服务器实例
- 文本文件/XML文件
- 还有其他/更好的主意吗
- 我不想在settings.settings、App.config等中存储任何设置
- 我不想使用注册表
- 我不想将设置存储在任何模糊的漫游目录结构或其他隐藏目录中。设置应存储在专用数据库/表或应用程序可执行文件夹或子文件夹中
- 我不确定是将所有配置对象存储在同一个实体中,还是应该设置几个这样的实体来存储配置组李>
- 保存这些作为设置/配置的轻量级对象并在以后加载和访问它们的最佳方法是什么
- 它很容易写和读
- 可读性强,易于手动打开和编辑
- 使用LINQtoXML,您可以查询特定数据并将该数据转换为强类型对象
- 广泛使用和理解,尤其是配置文件
- 柔性结构
XElement settings = XElement.Load("settings.xml");
IEnumerable<XElement> tcpSettings = settings.Elements("protocol").Where(o => o.Attribute("name").Value == "tcp")
// make some changes to the settings
settings.Save("settings.xml");
XElement settings=XElement.Load(“settings.xml”);
IEnumerable tcpSettings=settings.Elements(“协议”)。其中(o=>o.Attribute(“name”)。Value==“tcp”)
//对设置进行一些更改
保存(“settings.xml”);
编辑:
我想要一个专用的存储位置,它不能与其他MS特定的应用程序设置和配置混在一起。对于存储首选项来说,实体框架无疑是一个过火的工具。我只想使用一个
.json
文件,通过or读写,但那就是我。XML也一样好。为什么不使用System.Configuration命名空间中的类型?@DanAbramov,您将在哪里存储此类文件?此外,我还了解到,不能将所有集合轻松序列化为XML或Json。这就是为什么我保留了一个字典或哈希表,例如通过将其序列化为二进制。@AndrewKennan,因为我觉得它不是一个干净的解决方案,我不想将我的配置与MS特定的配置混淆。此外,我希望数据仍然可以从外部或通过其他应用程序访问。翻阅那些App.config文件感觉很尴尬。如果我做了错误的假设,请纠正我,但是我如何在app.config中存储字符串列表或字典?@Freddy,您可以扩展ConfigurationSection和ConfigurationElement类型来自定义配置文件的结构,您不需要将所有内容都放入AppSettings中。但是,因为您希望多个应用程序能够访问配置,所以数据库或某种类型的服务应用程序听起来更合适。到目前为止,听起来最合适,但我无法将.Net字典
转换为XML是否准确?我可以序列化为二进制,但不确定它是否适用于XML?我还可以在同一个XML文件中存储许多完全不同类型的不相关对象吗?是的,您可以在一个XML文件中存储各种类型的对象。您可以使用LINQ手动读取和写入对象,也可以使用DataContractSerializer,它是fleixible xml序列化程序,尽管生成的xml可能不如人类可读/整洁。我以前用它来序列化字典,所以你只要试试就行了。我将编辑带有链接的答案。