是否有关于何时使用Application settings(不是每个用户设置)与.config文件< appsettings>?
的建议 更新
希望了解一些更精细和重要的差异,因为它们都是有效的键/值存储。
例如,我知道在web.config中修改appsettings将回收Web应用程序。
设置已经在.NET中使用了一段时间,我没有费心去看它们 - 也许一个有点多余,或者同时使用两者都没有意义......这就是那种细节我希望了解原因。
答案 0 :(得分:16)
这个问题有点老了,但我偶然发现了它,并考虑增加一些清晰度以防其他人也偶然发现它......
设置选项(与原始的< appSettings>部分相对)在框架中得到了强有力的支持:
设置是强类型的(例如bool,int,ConnectionString等),而不是全部作为字符串返回,如果需要,可以由代码解析。
设置范围可以是a)内部或公共,以及b)每个用户或每个应用程序(后者本质上意味着每台机器)。
您的应用程序需要提供自己的界面来更改设置,但这很简单,因为设置属性在代码中是可读/写的,生成的类提供了保存更改的功能。
部署的app.config(或web.config)文件仅存储默认值(请参阅下文了解如何处理运行时更改) - 这意味着更改设置并在运行时保存它们不会更改.config文件 - 并且通过扩展名不会导致重新启动应用程序。
运行时的更改将保存到本地位置(c:\ ProgramData ..或c:\ Users \ MyUser \ AppData \ Local ..中的某个位置),具体取决于所选的范围。因此,应用程序的后续版本可以安全地引入新设置,而不必担心以前自定义的值,因为它们被安全地存储起来。
希望有助于澄清一些事情。
答案 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)
我创建了一个测试应用程序来探索,因为我从来没有费心去查看设置。以下是一些随机发现。
Properties.Settings.Default.myColor = Color.AliceBlue;
,但这总是为您提供默认值,该值作为属性的属性编译到您的代码中。 (我使用Reflector验证了这一点。getter标有以下内容:[ApplicationScopedSetting, DefaultSettingValue("asdf"), DebuggerNonUserCode]
)。总的来说,它们看起来非常相似。 “设置”对话框将为您提供一种设计师方式,可以在设计时配置值,以获得值。它还将为您处理序列化。我确信有一些方法可以获得实际值而不是默认值,这将是一个很好的方法来撤消任何用户自定义,如果你正在存储(IE,而不是使用当前值,只需引用默认值)但是,我目前不知道如何引用当前值。