2012-10-27 59 views
17

这可能听起来像一个微不足道的问题,但我已经通过网络简要地查看了一下,发现的是基本上存储应用程序的应用程序密钥/数据对的旧机制。C#App.config与设置文件

我想知道的是,我们(作为.NET开发人员)会选择使用app.config而不是Settings file

- 可以给某人请提供一些优点和缺点,以便我们可以正确使用它们。

再次感谢

+0

应用程序的全局设置存储在app.config中http://geekswithblogs.net/mbcrump/archive/2010/06/17/configuring-applicationuser-settings-in-wpf-the-easy-way.aspx – kenny

+0

yes但是通过将范围选择为应用程序 – IEnumerable

+2

是,也可以在设置文件中使用应用程序范围设置。看下设置文件的封面,它使用app.config – kenny

回答

25

用于桌面应用程序的App.config和用于Web应用程序的Web.config是.NET配置系统的一部分。它们主要用于控制.NET应用程序的.NET框架设置。这些配置设置可用于替换组件版本(部分<assemblyBinding>),替换.NET Framework版本(<启动>)等(完整的app.config模式请参阅msdn)。一个部分专用于自定义设置(<appSettings>)。还可以创建自定义部分。所以,当我们需要存储设置时,我们可以背诵app.config或创建我们自己的单独配置文件。

这里有优点和使用的app.config的反政府:

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

  2. Pro:有一个标准的层次结构machine.config/app.config。如果您计划可以在整个机器范围内设置并覆盖这些设置,或者为各个应用程序保持原样,则应使用app.config。

  3. Pro/Con:App.config在运行时被缓存。如果您预计在应用程序运行时更新它,则需要特别请求刷新特定部分的配置文件。对于web.config,当文件中的内容发生更改时,Web应用程序会自动重新启动。这很方便。结果:app.config与.exe文件存储在同一个目录下。通常它将位于C:\ Program Files的子文件夹中。该目录在Windows 7中受到额外的保护而不被写入。您需要成为Administrators组的成员才能在该处写入,如果控制面板中的UAC(用户访问控制)级别未设置为0(通常不是),则操作系统会要求您确认写入c:\程序文件。因此,没有管理员权限的用户将无法更改app.config中的配置。通过编程方式更改您的设置也是如此:如果在Windows 7中运行时不是管理员用户下的应用程序,则尝试编写app.config时,您的应用程序将会得到异常。您自己的配置文件通常会转到C:\ ProgramData \或c:\ Users子文件夹(在Windows 7上)。这些位置对用户或程序编写更友善。如果用户编辑你的app.config文件并意外损坏了它,整个应用程序将不会以一些模糊的错误信息开始。如果您的单独配置文件已损坏,您将能够提供更详细的错误消息。

结论:app.config为您提供更简单(更快的开发)方法,主要适用于只读设置。自定义设置文件为您提供了更多自由(存储文件,验证/错误处理的位置,模式的更多灵活性),但在开发过程中需要更多工作。

1

你有它向后,设置文件(或者因为他们最初被称为ini文件)是用于保存应用程序设置(键/值对)之前的Windows 95.释放机制的Windows 95,建议将应用程序设置移到Windows注册表中(这证明是有问题的,因为如果你搞砸了你的注册表,你的Windows可能无法启动)。

.config文件在.Net中发挥作用。 XML格式允许比简单的键/值对更加动态和复杂的设置配置。

现代用户/设置文件是.config文件的XML扩展名(可以在特定条件下覆盖.config中某些设置的设置)。

+0

OK回到主要问题,在VS中,我们可以添加Settings.settings文件或app.config。为什么不只是app.config – IEnumerable

+0

.Net中的设置是heirarchial。 machine.config文件包含机器范围设置,并且在运行时是只读的。 app.config包含应用程序范围的设置(可以添加或覆盖machine.config中的设置),在运行时也是只读的。特定的用户设置包含在user.config(“设置”)文件中,并添加到或覆盖app.config中的设置。 user.config文件可以保存到运行时。 – Kevin

+3

重新阅读了上述评论之后 - 我仍然没有回答“为什么”的问题。应用程序运行所需的某些设置(例如数据库连接信息,队列名称等)不应该由用户更新,并且应该位于app.config中。您可能希望/需要的其他设置(例如输入文件路径,输出文件路径等)允许用户在运行时间进行更改并能够保存更新的信息。这些类型的设置应该位于user.config(“设置”)文件中。 – Kevin