app.config文件和XYZ.settings文件有什么区别?


72

我实际上正处于与.NET相关的知识的学习阶段,并且正在探索如何保存应用程序。我最终编写了自己的类,该类将设置保存在XML文件中,然后发现.NET本身支持保存应用程序设置。

但是我发现了两种方法。当我在Visual Studio 2008中打开“添加新项”对话框时,它提供了创建设置文件(.settings)或配置文件(.config)的选项。两者之间的区别是什么?在什么情况下应使用它们?

Answers:


55

更新:在ASP.NET Core Land中,不再通过这两种方法中的任何一种来管理配置-请参见Travis Illig撰写的精彩文章Microsoft.Extension.ConfigurationMicrosoft.Extensions.Configuration.Binder其中az处于启用状态,并且实际上是所有这些的超集


设置(来自.settings set和Configuration.AppSettings)都存储在.config文件中[以及许多其他内容]。

区别在于.settings东西(在.NET 2.0 / VS2005中添加的)在一组属于一起的设置之上分层了一个强类型化的类,而Configuration.AppSettings只允许您检索字符串,强迫您进行任何转换,而不会有默认值的概念。(Configuration类实际上已经被分拆到了一个侧面程序集中以反映这一点-如果需要,您需要显式添加对System.Configuration的引用)。

如果您尚未添加.settings到您的项目中,则会导致添加一个app.config来容纳这些设置。每次更改组件/应用程序的设置列表时,都会自动生成读取设置的类。

.Settings的其他功能是可以将某些设置指定为用户特定的功能(也可以通过一次调用保存用户特定的设置)。

使用.Settings的最好理由通常是,您可以通过遵循属性的用法(在XML文件中每个集合都是一个单独的块)来清楚地标识谁在代码库中使用哪个设置。Configuration.appSettings从本质上讲更具全局性-它只是一袋属性,您不知道哪个DLL,子系统或类取决于特定的设置条目。有关更多信息,请参见Steven Smith的博客文章

最后,如果您对设置管理的了解还不够多,那么您就不会因为内容完整或想法和角度过多而在Rick Strahl上发表过这篇文章

旁白:本文还概述ASP.NET vNext Configuration内容,该内容非常灵活,并且在配置设置管理方面提供了不同的角度。


感谢你的回答。只是有一点困惑:有两种类型的设置。一种是应用程序设置,另一种是用户设置。如果两种类型的设置都存储在配置文件中,那么不同用户的用户设置会有何不同?
赫曼特

3
很抱歉忽略了这一点。用户设置是存在默认设置的原因之一(如果用户尚未使用该应用程序,则默认设置将应用,直到保存更改为止)。用户设置存储在用户配置文件(Users \ XXX)目录中的单独配置文件中。用户设置也可以更新(系统设置不能使用默认的API,并且不能使用-它们位于程序文件中,并且不能安全地控制多个用户对该文件的访问。)
Ruben Bartelink,2009年

配置管理器在哪里适合所有这些?我试图并不能告诉我我的settings.settings住哪里,然后在其中保存一个空白配置
JonnyRaa 2014年

@JonnyLeeds不确定您的意思,所以我将尝试扩展以查看是否对您有帮助...。您的.settings文件仅定义了架构,并被编译为代码隐藏。实际值存在于.config文件中,该文件将位于用户配置文件目录中(非用户不可写)。数据与放置在同一位置ConfigurationManager.AppSettings,只是采用自定义格式并具有更强的键入功能。您可以做类似的事情,ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.PerUserRoamingAndLocal ).FilePath但是在我告诉您之前...。为什么?
Ruben Bartelink 2014年

@RubenBartelink感谢您的回复。这几乎就是我得出的结论-刚刚在这里发表了问答,以记录我的痛苦!
JonnyRaa 2014年

5

设置文件是一个资源文件,您可以在其中指定不同的设置及其默认值。

这些值本身是在应用程序配置文件(.config文件)中配置的。

永远不会部署设置文件,因此您将需要配置文件来进行配置。


当我处于挑剔模式时(只是更新了我自己的帖子,很多东西在那里丢失了)虽然.settings文件是XML文件,但我可以肯定地确定它不会作为资源被合并,是吗?同样,用户特定的值将存储在.config文件之外的单独区域中。如果您具有非默认设置,则需要部署.config文件(如果在配置文件中未指定任何内容,则生成的设置类中的属性将管理值的默认设置。)
Ruben Bartelink 09年

虽然没有部署Settings.settings xml文件,但Settings.Designer.cs文件被编译到了应用程序中,不是吗?
凯尔·德莱尼

0

app.config文件存储在与应用程序相同的目录中。普通用户将没有写权限(例如,在“程序文件”中)。

设置文件应存储在用户“ AppData”目录中(他具有读写权限)。

因此,请使用设置文件中的用户可配置选项。


不太对劲,根据其他答案:stackoverflow.com/a/909712/199364stackoverflow.com/a/13072966/199364 .settings(和Visual Studio的Settings支持),可以一次性应用程序配置和每个用户的配置均可使用。.settings在运行时不存在;运行时存在的内容app.config位于app文件夹中,而[user].config位于用户的数据文件夹中。
ToolmakerSteve
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.