it-swarm.dev

appSettings vs applicationSettings。 appSettings已过时?

我有两个关于在web.config中保存设置的方法的问题。

Appsettings :查看web.config

<appSettings>
 <add key="key1" value="value1"/>
 <add key="key2" value="value2"/>
</appSettings>

代码隐藏中的用法

ConfigurationManager.AppSettings["key1"];

ApplicationSettings/Properties (通过使用项目中的'properties'选项卡自动生成)
查看web.config

<applicationSettings>
    <Projectname.Properties.Settings>
        <setting name="TestEnvironment" serializeAs="String">
            <value>True</value>
        </setting>
    </Projectname.Properties.Settings>
</applicationSettings>

代码隐藏中的用法

Properties.Settings.Default.TestEnvironment

那么,web.config中设置的这两种存储可能性有什么区别?
据我所知,appSettings的一个缺点是你自己修改了web.config并且appSettings不是强类型的,就像applicationSettings那样。

两者都可以在Web部署项目中替换。

就我而言,有 没有用于appSettings 。我在这里错过了什么吗?哪个是历史悠久的旧版?

53
citronas

这在前面已经讨论过: appSettings vs applicationSettings(.NET app.config)的优点和缺点

至于你的问题:旧问题是<appSettings>,它在2.0之前,<applicationSettings>在2.0中可用。

优点?当我正在编辑一个值,或者在服务器上添加一个值,其中最好的工具是notepad <applicationSettings>是 very verbose,有时I 只需要一个字符串 。也许是一个愚蠢的例子,但是当我在层之间调整配置设置以正确地进行自动部署设置时,它非常有用,它很简单。

我不得不同意 marc_s 来自其他讨论,但如果你正在做任何非常复杂的事情,那么你可能已经接近了你应该拥有自己的配置部分。由于您在启动时反序列化为您的配置类型...您可以通过这种方式检查相同的类型,只需通过XML Serializer直接进行,这是唯一的区别。

这也有一个好处,就是我可以为每个不同的区域做Config.LDAPServer或者一个配置,比如Security.ConfigThemes.Config(猜测这里!),你可以在那里获得一个非常有用/清晰的命名方案作为附带好处。

22
Nick Craver

ApplicationSettings是命名空间,因此两个不同的程序集都可以设置“timeout”而不会发生冲突,ApplicationSettings是可选的,因为默认值是通过代码中的设置属性设置的。

21
Bernhard Hofmann

我注意到的一件事是AppSettings值可以通过aspx页面中的<%$ AppSettings: name %>内联标记引用,但似乎没有通过内联标记访问ApplicationSettings值的等效方法。

6
Loophole

我想补充一点,IIS 8.0 GUI(以及之前的版本)也无法编辑<applicationSettings>部分(它是不可见的,即看起来好像没有参数可以配置)而<appSettings>可以用IIS编辑] 8.0。

如果VS2012/IIS 8.0一直使用相同的GUI配置系统,那将是很好的,但产品在这方面似乎没有同步。无论如何,您可能需要使用记事本编辑应用程序设置。

连接字符串确实出现在两个GUI中,但如果在IIS中使用<applicationSettings>,则它们包含完整路径( Namespace 。Properties.Settings. ConnectionStringName )。

3
galmok