何时使用.NET设置vs config <appsettings>?</appsettings>

时间:2010-06-04 16:42:59

标签: .net appsettings settings.settings

是否有关于何时使用Application settings(不是每个用户设置)与.config文件&lt; appsettings&gt;?

的建议

更新
希望了解一些更精细和重要的差异,因为它们都是有效的键/值存储。 例如,我知道在web.config中修改appsettings将回收Web应用程序。

设置已经在.NET中使用了一段时间,我没有费心去看它们 - 也许一个有点多余,或者同时使用两者都没有意义......这就是那种细节我希望了解原因。

9 个答案:

答案 0 :(得分:16)

这个问题有点老了,但我偶然发现了它,并考虑增加一些清晰度以防其他人也偶然发现它......

设置选项(与原始的&lt; appSettings&gt;部分相对)在框架中得到了强有力的支持:

  1. 设置是强类型的(例如bool,int,ConnectionString等),而不是全部作为字符串返回,如果需要,可以由代码解析。

  2. 设置范围可以是a)内部或公共,以及b)每个用户或每个应用程序(后者本质上意味着每台机器)。

  3. 您的应用程序需要提供自己的界面来更改设置,但这很简单,因为设置属性在代码中是可读/写的,生成的类提供了保存更改的功能。

  4. 部署的app.config(或web.config)文件仅存储默认值(请参阅下文了解如何处理运行时更改) - 这意味着更改设置并在运行时保存它们不会更改.config文件 - 并且通过扩展名不会导致重新启动应用程序。

  5. 运行时的更改将保存到本地位置(c:\ ProgramData ..或c:\ Users \ MyUser \ AppData \ Local ..中的某个位置),具体取决于所选的范围。因此,应用程序的后续版本可以安全地引入新设置,而不必担心以前自定义的值,因为它们被安全地存储起来。

  6. 希望有助于澄清一些事情。

答案 1 :(得分:5)

到目前为止,答案似乎忽略了一点是.config文件可以使用Transformation files进行转换。这些文件默认情况下可用于Web.config文件(在Visual Studio中),并且使用Visual Studio的SlowCheetah - XML Transforms加载项为任意.config文件启用(SlowCheetah还添加了预览器并在构建上应用转换而不仅仅是 deploy

答案 2 :(得分:3)

应用程序设置和配置文件appSettings部分仅限于键值对,这对于简单设置很有用,但如果您需要更强大的数据持久性,则可以考虑为应用程序创建自定义配置部分。以下是有关创建自定义config section

的stackoverflow文章

享受!

答案 3 :(得分:2)

可以输入应用程序设置,与appsettings相比,这是一个加分。 并且你可以访问它们的方式稍微整洁(属性)然后从数组中获取值。

您可以使用该界面实现一个设置类,将您的设置存储在数据库中。

答案 4 :(得分:1)

要注意的一件事是,如果您通过ClickOnce进行部署,尽管配置文件现在是可写的,但它们不在ClickOnce部署的应用程序中,因为它会带有文件哈希值。

因此,根据经验,任何环境配置都在app.config中。任何用户配置都在“设置”中。

有时线条有点模糊,所以对于那些模糊的线条,我会用静态存取方法包装,这样你就可以随意移动它们。

答案 5 :(得分:1)

我以前做过的事情是创建一个包含适合要保留的设置的属性的类。然后将类实例XML序列化为文件,稍后可以反序列化以获取相同的对象,属性值保持不变。并且应用程序不需要回收,如果您写入web.config / app.config文件,它将会被回收。

您可以通过这种方式获得强类型应用程序设置,而不必担心键和值。当我想在应用程序中提供用户可设置的选项时,这对我来说相当不错。

答案 6 :(得分:0)

我使用.config文件设置(web.config)来处理编译后可能发生的所有变化。发布代码。这很好,因为你可以轻松改变它。我不熟悉应用程序设置,但如果您更改了应用程序设置,它看起来就像您可能需要重新编译应用程序。

答案 7 :(得分:0)

应用程序设置无法编译到程序集中。

我不确定,但我认为应用程序设置默认值已编译到程序集中,但可以在配置文件中覆盖这些值。

我认为应用程序设置是以更友好的方式创建的,特别是来自VB.Net,但我认为没有任何巨大的差异。至少对于简单的设置,我更喜欢应用程序设置,原因在于LeonG的回答。

答案 8 :(得分:0)

我创建了一个测试应用程序来探索,因为我从来没有费心去查看设置。以下是一些随机发现。

  • 设置为您提供了在代码中引用的显式属性/名称,但如果您反汇编已编译的应用程序,则getter只是在其内部字典中查找值。
  • 设置会在自己的部分中将spat恢复到您的.config文件中。看起来你可以编辑.config文件来改变这个值,但事实并非如此,有点像下面的解释。
  • 根据上面链接的文档,似乎获取该值的唯一方法是使用Properties.Settings.Default.myColor = Color.AliceBlue;,但这总是为您提供默认值,该值作为属性的属性编译到您的代码中。 (我使用Reflector验证了这一点。getter标有以下内容:[ApplicationScopedSetting, DefaultSettingValue("asdf"), DebuggerNonUserCode])。
  • 设置是强类型的。编译器将自动处理对象的序列化(但这只是几行代码)。

总的来说,它们看起来非常相似。 “设置”对话框将为您提供一种设计师方式,可以在设计时配置值,以获得值。它还将为您处理序列化。我确信有一些方法可以获得实际值而不是默认值,这将是一个很好的方法来撤消任何用户自定义,如果你正在存储(IE,而不是使用当前值,只需引用默认值)但是,我目前不知道如何引用当前值。