AppSettings 与 applicationSettings 的优缺点(. NET app.config/Web.config)

当开发一个。NET Windows 窗体应用程序可以在这些 App.config标记中选择存储配置值。哪个更好?

<configuration>


<!-- Choice 1 -->
<appSettings>
<add key="RequestTimeoutInMilliseconds" value="10000"/>
</appSettings>


<!-- Choice 2 -->
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" >
<section name="Project1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<Project1.Properties.Settings>
<setting name="TABLEA" serializeAs="String">
<value>TABLEA</value>
</setting>
</Project1.Properties.Settings>
</applicationSettings>


</configuration>
103049 次浏览

可以从设计器控制应用程序设置(默认情况下通常有一个 Settings.setup 文件) ,因此更容易修改,并且可以通过 Settings 类以编程方式访问它们,在这里它们看起来像一个强类型属性。您还可以拥有应用程序和用户级别设置,以及用于回滚的默认设置。

这是从。NET 2.0以后,并且不赞成用其他的方式来做这件事(就我所知)。

更多细节见: Msdn.microsoft.com/en-us/library/k4s6c3a0.aspx

基本的 <appSettings>是比较容易处理的-只要在一个 <add key="...." value="..." />入口,你就完成了。

缺点是: 没有类型检查,例如,你不能安全地假设你想要配置的数字确实有一个数字-有人可以把一个字符串放入该设置... ..。你只需要以 ConfigurationManager["(key)"]的形式访问它,然后你就可以知道你在处理什么了。

此外,随着时间的推移,<appSettings>可能会变得相当复杂和混乱,如果您的应用程序的很多部分开始放东西在那里(还记得旧的 windows.ini 文件?:-)).

如果可以,我更喜欢并推荐使用您自己的配置节-with。NET 2.0,它真的变得很容易,这样,你可以:

  • A)在代码中定义配置设置,并使其具有类型安全性 检查过了
  • B)你可以把 你的设置和每个人分开 你也可以重用你的配置代码!

在 CodeProject 上有一系列关于你的很好的文章来揭开.NET 2.0配置系统的神秘面纱:

  1. 解开.NET 2.0配置之谜

  2. 解码.NET 2.0配置的奥秘

  3. 解开.NET 2.0配置之谜

强烈推荐! Jon Rista 在解释.NET 2.0中的配置系统方面做得很好。

我喜欢使用更简单的版本来存储和访问单个值。

<appSettings>
<add key="MyConfigKey" value="true"/>
</appSettings>

我编写了一个实用程序类来以类型安全的方式访问值,这种方式允许默认值。如果没有提供默认值,则会给出有用的异常消息。

你可以在这里看到/下载这个类:

Http://www.drewnoakes.com/code/util/app-settings-util/

我一直在使用一种模式,这种模式使用基本的 xml 标记,但是将设置封装在一个静态配置类中。所以,一个 DIY 应用。设定。

静态配置模式

如果你这样做,你可以:

  • 针对不同的环境(dev、 test、 prod)使用不同的配置值集
  • 为每个设置提供合理的默认值
  • 控制如何定义和实例化值

设置非常繁琐,但是性能良好,隐藏对键名的引用,并且是强类型的。这种模式适用于应用程序不会更改的配置,尽管您也可以支持更改。

配置:

<add key="machineName" value="Prod" />
<add key="anotherMachineName" value="Test" />
<add key="EnvTypeDefault" value="Dev" />


<add key="RootURLProd" value="http://domain.com/app/" />
<add key="RootURLTest" value="http://test.domain.com/app/" />
<add key="RootURLDev" value="http://localhost/app/" />


<add key="HumanReadableEnvTypeProd" value="" />
<add key="HumanReadableEnvTypeTest" value="Test Mode" />
<add key="HumanReadableEnvTypeDev" value="Development Mode" />

配置类:

using System;
using System.Collections.Generic;
using System.Web;
using WebConfig = System.Web.Configuration.WebConfigurationManager;


public static class Config
{
#region Properties


public static string EnvironmentType { get; private set; }


public static Uri RootURL { get; private set; }


public static string HumanReadableEnvType { get; private set; }


#endregion


#region CTOR


/// <summary>
/// Initializes all settings when the app spins up
/// </summary>
static Config()
{
// Init all settings here to prevent repeated NameValueCollection lookups
// Can increase performance on high volume apps


EnvironmentType =
WebConfig.AppSettings[System.Environment.MachineName] ??
"Dev";


RootURL =
new Uri(WebConfig.AppSettings["RootURL" + EnvironmentType]);


HumanReadableEnvType =
WebConfig.AppSettings["HumanReadableEnvType" + Config.EnvironmentType] ??
string.Empty;
}


#endregion
}

为了理解 app.config中的 专业人士缺点设置,我建议你研究一下这两个设置的技术细节。我已经包括了你可以找到处理源代码的链接,在下面描述了更多的技术细节。

让我简要地总结一下我在使用它们时发现了什么(注:同样适用于 Web 站点/web 应用程序的 web.config文件) :


NET 中的 applicationSettings
(点击上面查看源代码和技术细节)


优点

  • 它们允许存储类型化数据,包括对象类型(通过 serializeAs属性)

  • 它们有一个用户和应用程序范围,允许存储默认值

  • VisualStudio 的配置部分支持它们

  • 支持长字符串和/或带有特殊字符的数据(例如,包含双引号的嵌入式 JSON 字符串)


缺点

  • 用户设置存储在用户配置文件中的不同位置(具有隐蔽的路径) ,可能难以清除

  • 应用程序范围设置在应用程序运行期间是只读的(只有用户范围设置可以在运行期间更改)

  • 读/写方法代码由 Visual Studio 的设置设计器构建,不是由第三方工具直接提供的(请参阅上面的链接以获得解决方案)


.NET 中的应用程序设置
更新: .NET 核心中的应用程序设置 < br/> < em > (点击上面查看源代码和技术细节)


优点

  • 是“轻量级”,即易于处理

  • 应用程序运行期间的读写访问

  • 管理员可以在 < br/> 互联网资讯服务经理 < br/> (特性视图-> 应用程序设置,注意图标的名称有误导性,因为它只能处理应用程序设置,而不能处理应用程序设置)中轻松地编辑它们


缺点

  • 仅支持字符串数据; 限制字符串长度和特殊字符

  • 他们没有用户范围

  • 它们不支持默认值

  • 在 VisualStudio 的配置部分中不直接受支持


使用 ApplicationSettings 的一大好处是当应用程序通过 ClickOnce 部署时,正如在 这一页中详细解释的那样。

基本上,如果一个设置是 User 类型的,并且已经从它的默认值修改过,那么它将从一个更新修改到另一个更新。如果设置为 Application 类型,则在更新应用程序时将自动重写该设置。

而且,在 VB.NET 中,可以通过简单地使用 My 来访问 ApplicationSettings。设定。从图形用户界面的角度来看,这是最简单的设置。