55

我对在 web.config 中保存设置的两种方法有一些疑问。

应用设置:查看web.config

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

代码隐藏中的用法

ConfigurationManager.AppSettings["key1"];

ApplicationSettings/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 没有用。我在这里错过了什么吗?哪个是历史上看到的更古老的?

4

4 回答 4

25

这已经在这里讨论过:Pros and cons of appSettings vs applicationSettings (.NET app.config)

至于您的问题:较旧的是<appSettings>,大约在2.0之前,<applicationSettings>在2.0中可用。

优势?当我在编辑一个值,或者在最好的工具是记事本的服务器上添加一个值时<applicationSettings>非常冗长,有时我只想要一个 string。也许是一个愚蠢的例子,但是当我调整层之间的配置设置以正确获得自动部署设置时,它的简单性非常有用。

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

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

于 2010-02-28T12:02:36.377 回答
23

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

于 2011-10-26T05:40:46.873 回答
6

One thing I have noticed is that AppSettings values can be referenced via <%$ AppSettings: name %> inline tags in aspx pages, but there seems to be no equivalent way to access ApplicationSettings values through inline tags.

于 2011-10-26T05:35:14.300 回答
3

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

如果 VS2012/IIS 8.0 一直使用相同的 GUI 配置系统就好了,但产品在这方面似乎并不同步。一种或另一种方式,您可能必须使用记事本编辑应用程序设置。

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

于 2013-08-07T13:37:16.127 回答