C# App.config与Settings文件的区别

23

这个问题可能听起来很琐碎,但我简单地查看了一下网络上的资料,发现app.config基本上是一种旧的机制,用于为应用程序存储应用程序键/数据对。

我想知道的是,作为.NET开发人员,我们是否有理由选择使用app.config而不是Settings文件

-可否请有人提供一些关于两者的优缺点,以便我们可以正确地使用它们。

再次感谢


应用程序的全局设置存储在 app.config 文件中。http://geekswithblogs.net/mbcrump/archive/2010/06/17/configuring-applicationuser-settings-in-wpf-the-easy-way.aspx - kenny
是的,但是应用程序范围的设置也可以在设置文件中使用,通过选择作用域为“应用程序”。 - IEnumerable
2
是的,查看设置文件的代码实现可以发现它使用了 app.config 文件。 - kenny
1
啊,所以设置文件将通过可视化界面和编程方式提供接口,可以通过AppSettings.Default访问。 - IEnumerable
2个回答

30

App.config 和 Web.config 是 .NET 配置系统的一部分,前者用于桌面应用程序,后者用于 Web 应用程序。它们主要用于控制 .NET 框架在我们的应用程序中的设置,这些设置包括如下内容:程序集版本的替换(<assemblyBinding> 部分)、.NET 框架版本的替换(<startup> 部分)等(请参见 msdn 以获取完整的 app.config 架构)。还有一个部分是专门为应用程序开发人员的自定义设置而设的(<appSettings>)。同时,也可以创建自定义部分。因此,当需要存储设置时,可以使用 app.config 或创建自己的单独配置文件。

以下是使用 app.config 的优缺点:

  1. 优点:.NET 已经有了标准 API 来从 appSettings 部分读取设置。如果只需要几个配置设置,则使用这个已经准备好的 API 要比开发和测试自己的类来读取配置文件容易得多。此外,app.config 文件已经包含在 VS 项目中。

  2. 优点:机器范围内和应用程序范围内的设置有一个标准层次结构。如果你计划这样的设置,可以在机器范围内设置,并为个别应用程序覆盖或保留原样,则应使用 app.config。

  3. 优点/缺点:App.config 在运行时被缓存。如果你预计在应用程序运行时更新它,需要明确请求配置文件的某个部分进行刷新。对于 Web.config,当文件中的内容发生变化时,Web 应用程序会自动重新启动,这很方便。

  • 缺点:app.config保存在与.exe文件相同的目录中。通常它会位于C:\Program Files的子文件夹中。这个目录在Windows 7中受到额外保护,不能进行写入。您需要是管理员组的成员才能在那里进行写操作,并且如果您在控制面板中的UAC(用户访问控制)级别未设置为0(通常不会),操作系统将要求您确认写入c:\Program Files。因此,没有管理员权限的用户将无法更改app.config中的配置。同样适用于以编程方式更改设置:如果您的应用程序在Windows 7上不是在管理员用户下运行,则在尝试写入app.config时,应用程序将获得异常。您自己的配置文件通常存储在C:\ProgramData\或c:\Users子文件夹(在Windows 7上)。这些位置更适合用户或程序进行写入。

  • 缺点:如果用户编辑了您的app.config文件并意外破坏了它,整个应用程序都将无法启动,并显示一些晦涩的错误消息。如果您的单独配置文件损坏,您将能够提供更详细的错误消息。

  • 总之:app.config为您提供了更轻松(更快速的开发)的方法,通常适用于只读设置。自定义设置文件为您提供了更多自由(文件存储位置、验证/错误处理、其模式更具灵活性),但在开发过程中需要更多工作。


    2
    你的理解是反过来的,设置文件(或原始称为ini文件)是在Windows 95之前用于保存应用程序设置(键/值对)的机制。随着Windows 95的发布,建议将应用程序设置移动到Windows注册表中(这证明是有问题的,因为如果你弄坏了注册表,你的Windows可能无法启动)。
    .config文件是在.Net中引入的。XML格式允许更动态和复杂的设置配置,而不仅仅是简单的键/值对。
    现代用户/设置文件是.config文件的XML扩展(可以在特定条件下覆盖.config中的某些设置)。

    好的,回到主要问题,在.NET VS中我们可以添加Settings.settings文件或app.config。为什么不只用app.config呢? - IEnumerable
    .Net中的设置是分层的。machine.config文件包含机器范围内的设置,在运行时只读。app.config包含应用程序范围内的设置(可以添加或覆盖machine.config中的设置),在运行时也是只读的。特定用户设置包含在user.config(“Settings”)文件中,并且可以添加或覆盖app.config中的设置。user.config文件可以在运行时保存。 - Kevin
    3
    重新阅读以上评论后,我仍然没有回答“为什么”的问题。应用程序运行所需的某些设置(例如数据库连接信息、队列名称等)不应由用户更新,并应位于app.config文件中。其他设置(例如输入文件路径、输出文件路径等)可能需要允许用户在运行时更改并具有保存更新信息的能力。此类设置应位于用户配置(“Settings”)文件中。 - Kevin

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接