【问题标题】:App.config vs. .ini filesApp.config 与 .ini 文件
【发布时间】:2010-03-19 08:15:43
【问题描述】:

我正在审查一个 .NET 项目,并且遇到了一些大量使用 .ini 文件进行配置的情况。我更喜欢使用 app.config 文件,但在我开始与开发人员讨论这个问题之前,我想知道是否有任何正当理由偏爱 .ini 文件而不是 app.config?

【问题讨论】:

  • Raymond Chen 有一篇关于 ini 和 xml 配置之间差异的有趣文章,以及为什么最初不推荐使用 ini 以支持注册表。见 - blogs.msdn.com/oldnewthing/archive/2007/11/26/6523907.aspx
  • 感谢您的链接,阅读起来很有趣。并且上述项目还使用注册表来获取许可信息!配置无处不在。 :)
  • 没有人对重新安装期间设置的持久性/针对不同用户等做出任何说明。应该指出的是,app.config 文件与应用程序相关联,除非您特别在重新安装/更新等时处理此问题,您可能会丢失所有设置! ini/xml 文件可以在这里不受影响

标签: c# .net configuration


【解决方案1】:

嗯,平均而言,.INI 文件可能更紧凑,并且对人类来说更具可读性。 XML 读起来有点麻烦,而且非常冗长。

然而,app.config 当然是标准的 .NET 配置机制,它在 .NET 中受支持,并且有很多钩子和做事的方法。如果你使用 .INI 文件,你基本上是在“一路滚动你自己的”。 “重新发明轮子”的经典案例。

再说一遍:有没有可能这是一个在 .NET 之前就开始生命的项目?还是现有 pre-.NET Windows 应用程序的端口,其中 .INI 文件是可行的方式?

我认为 .INI 文件本质上并没有什么问题——它们在 .NET 中不再受到真正的支持,你只能靠自己来扩展它们、处理它们等。如果您永远需要借助外部帮助 - 几乎没有任何 .NET 开发人员会接触过 .INI 文件,而 .NET 配置系统已广为人知。

【讨论】:

  • 该项目相对较新,但 .ini 文件似乎是一些开发人员从过去项目中继承的坏习惯。是的,这是车轮改造的经典案例。 :) 我不确定我是否同意 .ini 更具人类可读性。使用 .config 文件,VS 和智能感知编辑变得轻而易举。我希望团队创建一个很好的模式来支持配置设置。感谢您的回答。
  • 好的,所以如果这只是一个坏习惯,我会尝试改变它:-) 尝试确定为什么 app.config 更出色 - 更好的 .NET 支持,编写 XML 模式的能力强制执行部分组等 - 希望这将是某些开发人员最终需要放弃超过 10 年的老技术并转向更新的东西!
【解决方案2】:

Ini 文件在我的书中是相当不错的。问题是 GetPrivateProfileString() 和表兄弟。 Appcompat 将其变成了一种丑陋的 API 函数。检索单个 ini 值大约需要 50 毫秒,这在现代 PC 上是一个巨大的时间。

但是最大的问题是无法控制INI文件的编码。 Windows 将始终使用系统代码页来解释字符串。只要您的程序离您的办公桌不远,这就可以了。如果是这样,当您不将 INI 文件中使用的字符集限制为 ASCII 时,它有产生乱码的严重风险。

XML 没有这个问题,.NET 框架很好地支持它。无论是使用设置还是自己管理配置。

【讨论】:

    【解决方案3】:

    就我个人而言,我从不使用 .ini /xml 配置文件,只是将所有值加载到单例或其他东西中,然后像这样在运行时使用它们......

    话虽如此,我坚信您应该查看数据的类型和数据的使用。如果数据在设置和配置方面位于应用程序的上下文中,那么我相信 app.config 文件是保存这些设置的正确位置。

    另一方面,如果数据涉及加载与应用程序内容有关的项目、图像或其他资源,那么我相信 .ini(还有人使用 .ini 文件吗?我正在考虑一个 .xml 文件)存储这些信息)。简而言之:根据领域和上下文对正在存储的数据的内容进行分段。

    【讨论】:

      【解决方案4】:

      INI 文件更适用于多平台应用程序(例如 Linux 和 Windows),在这些应用程序中,客户可能偶尔会直接编辑配置参数,并且您需要一个更加用户友好/可识别的文件名而无需额外的努力。

      【讨论】:

        猜你喜欢
        • 2018-01-02
        • 2011-02-02
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 2019-03-09
        • 2015-07-03
        • 2014-04-24
        • 2018-06-24
        相关资源
        最近更新 更多