Jad*_*ias 160 .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>
Run Code Online (Sandbox Code Playgroud)
mar*_*c_s 145
基本<appSettings>
更易于处理 - 只需打入一个<add key="...." value="..." />
条目就可以了.
缺点是:没有类型检查,例如,您无法安全地假设您想要配置的号码确实存在一个数字 - 有人可以将字符串放入该设置中......您只需访问它ConfigurationManager["(key)"]
然后就可以了要知道你在处理什么.
此外,随着时间的推移,<appSettings>
如果应用程序的很多部分开始将内容放入其中,那么可能会变得相当复杂和混乱(请记住旧的windows.ini文件?:-)).
如果可以,我宁愿并建议使用您自己的配置部分 - 使用.NET 2.0,它真的变得非常简单,这样,您可以:
有一系列非常好的文章可以揭开CodeProject上的.NET 2.0配置系统的神秘面纱:
强烈推荐!Jon Rista在.NET 2.0中解释配置系统方面表现出色.
Pet*_*r C 20
应用程序设置可以从设计器控制(默认情况下通常有一个Settings.settings文件),因此它更容易修改,您可以通过Settings类以编程方式访问它们,它们看起来像一个强类型属性.您还可以具有应用程序和用户级别设置,以及用于回滚的默认设置.
这可以从.NET 2.0开始提供,并且不赞成其他方式(据我所知).
更多细节见:msdn.microsoft.com/en-us/library/k4s6c3a0.aspx
HAL*_*000 14
我一直在使用我发现的模式,你在那里使用基本的xml标签,但将设置包装在静态配置类中.所以 - 一个DIY App.Settings.
如果你这样做,你可以:
设置但执行良好,隐藏对密钥名称的引用,并且是强类型的,这很繁琐.这种模式适用于未被应用程序更改的配置,尽管您也可以支持更改.
配置:
<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" />
Run Code Online (Sandbox Code Playgroud)
配置类:
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
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*att 10
要了解优点和缺点的设置app.config
,我建议你看看双方的技术细节.我已经包含了链接,您可以在其中找到处理源代码,下面将介绍更多技术细节.
让我简要总结一下我在使用它们时所认识到的内容(注意:同样适用于web.config
网站/ Web应用程序的文件):
applicationSettings
(点击上方查看源代码和技术细节)
优点
它们允许存储类型化数据,包括对象类型(通过serializeAs
属性)
它们具有用户和应用程序范围,允许存储默认值
它们在Visual Studio的配置部分中受支持
支持长字符串和/或具有特殊字符的数据(例如,包含双引号的嵌入式JSON字符串)
缺点
用户设置存储在用户配置文件中的不同位置(具有神秘路径),可能难以清理
应用程序范围设置在应用程序运行期间是只读的(在运行时只能更改用户范围设置)
由Visual Studio的设置设计器构建的读/写方法代码,不是由第三方工具直接提供的(请参阅上面的链接以获取解决方案)
AppSettings
(点击上方查看源代码和技术细节)
优点
是"轻量",即易于处理
在应用程序的运行时期间进行读写访问
管理员可以在
Internet信息服务(IIS)管理器中 轻松编辑它们
(功能视图 - >应用程序设置,请注意,图标的名称具有误导性,因为它只能处理AppSettings而不能处理ApplicationSettings)
缺点
仅支持字符串数据; 字符串长度和特殊字符是有限的
他们没有用户范围
它们不支持默认值
在Visual Studio的配置部分中不直接支持
我喜欢使用更简单的版本来存储和访问单个值.
<appSettings>
<add key="MyConfigKey" value="true"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
我编写了一个实用程序类,以类型安全的方式访问值,允许使用默认值.如果未提供默认值,则会给出有用的异常消息.
你可以在这里看到/下载课程:
http://www.drewnoakes.com/code/util/app-settings-util/
归档时间: |
|
查看次数: |
92680 次 |
最近记录: |