我对在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的类型不是强类型,而appSettings就是这样。
两者都可以在Web部署项目中替换。
就我而言,没有用于appSettings 。我在这里错过了什么吗?哪个是历史上看到的旧版?
答案 0 :(得分:22)
此前已经讨论过:Pros and cons of appSettings vs applicationSettings (.NET app.config)。
至于你的问题:较旧的问题是<appSettings
&gt;,它在2.0之前,<applicationSettings
&gt;在2.0中可用。
优势?当我正在编辑某个值,或在最佳工具为notepad <applicationSettings
&gt;的服务器上添加值时是非常详细,有时我只想要一个字符串。也许是一个愚蠢的例子,但是当我调整层之间的配置设置以正确地进行自动部署设置时,它非常有用,它很简单。
我必须同意其他讨论中的marc_s,如果你正在做任何非常复杂的事情,那么你可能已经接近了你应该拥有自己的配置部分。由于您在启动时反序列化为您的配置类型...您可以通过这种方式检查相同的类型,只需通过XML Serializer直接进行,这是唯一的区别。
这样做的另一个好处就是我可以Config.LDAPServer
或者每个不同的区域配置一个配置,比如Security.Config
和Themes.Config
(猜猜在这里!),你可以得到一个非常有用的/明确命名方案作为附带利益。
答案 1 :(得分:21)
ApplicationSettings是命名空间,因此两个不同的程序集都可以设置“timeout”而不会发生冲突,ApplicationSettings是可选的,因为默认值是通过代码中的设置属性设置的。
答案 2 :(得分:6)
我注意到的一件事是AppSettings值可以通过aspx页面中的<%$ AppSettings: name %>
内联标记引用,但似乎没有通过内联标记访问ApplicationSettings
值的等效方法。
答案 3 :(得分:3)
我想补充一点,IIS 8.0 GUI(以及以前的版本)也无法编辑<applicationSettings>
部分(它是不可见的,即看起来好像没有参数可以配置)而<appSettings>
可以使用IIS 8.0进行编辑。
如果VS2012 / IIS 8.0一直使用相同的GUI配置系统会很好,但产品在这方面似乎没有同步。无论如何,您可能需要使用记事本编辑应用程序设置。
连接字符串确实出现在两个GUI中,但如果在IIS中使用<applicationSettings>
,则它们包含完整路径(命名空间 .Properties.Settings。 ConnectionStringName )。< / p>