Dotnet 2.0配置系统

今天使用VS2005开发一个Windows服务,发现dotnet2.0的配置系统相对于1.x的功能变化很大。记录下来同各位共享。 .NET Framework 1.1 提供一个基本的应用程序配置机制,以允许您定义应用程序配置文件中的只读应用程序设置。您可以通过System.Configuration.AppSettings类来访问这些设置,该类通过键来检索设置,并且返回一个必须转换为合适类型的弱类型对象。此机制对于简单情况而言是非常有用的,这些简单情况专注于一般只能由管理员修改的相对静态的数据。但是,许多其它应用程序配置的情况要求有一个更强大、更灵活的解决方案。.NET Framework 2.0 和 Visual Studio 2005 为 Windows 窗体应用程序提供了一个新的配置系统。该系统解决了先前解决方案的限制,并且引入了许多新概念,使您感受到更完整、更有效的设计时体验和更加个性化的最终用户体验。

配置设置该配置系统对配置设置的定义、读取以及写入提供了更强大的支持。每个设置均按其名称、数据类型、作用域、默认值以及可访问性进行定义。所有的设置都是强类型的,并且您可以指定任何可序列化的类型。该配置系统支持许多持久化设置值的机制,包括字符串表示、XML 序列化以及二进制序列化。还可以将设置定义为如下两个作用域之一:用户或应用程序。应用程序设置是只读的,并且其值由计算机上此应用程序的所有用户共享。默认情况下,这些值存储在应用程序配置文件中。下面是一些配置设置的示例:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <configSections>
      <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
         <section name="BigTeam.WindowsService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </sectionGroup>
   </configSections>
   <applicationSettings>
      <BigTeam.WindowsService.Properties.Settings>
         <setting name="BigTeam_WindowsService_JoinJobService_SecurityService"
            serializeAs="String">
            <value>http://localhost/BigTeam.Security/SecurityService.asmx</value>
         </setting>
         <setting name="IntervalMinutes" serializeAs="String">
            <value>5</value>
         </setting>
      </BigTeam.WindowsService.Properties.Settings>
   </applicationSettings>
</configuration>

包装类配置系统需要您使用包装类来访问存储于配置存储中的设置。这些包装类向配置系统提供了强类型的接口,并且提供了完整描述每个设置的元数据。这就允许包装类的用户无需直接访问配置文件就可以理解每个设置的配置方式。

注您应该了解,配置系统是通过一个可插入的体系结构来连接设置存储的。最初,系统只支持配置文件中的存储设置,但是最后会支持许多潜在的设置存储。

下面是先前显示的设置的包装类:

namespace BigTeam.WindowsService.Properties {    
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {        
        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
        public static Settings Default {
            get {
                return defaultInstance;
            }
        }
        [global::System.Configuration.ApplicationScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.WebServiceUrl)]
        [global::System.Configuration.DefaultSettingValueAttribute("http://localhost/BigTeam.Security/SecurityService.asmx")]
        public string BigTeam_WindowsService_JoinJobService_SecurityService {
            get {
                return ((string)(this["BigTeam_WindowsService_JoinJobService_SecurityService"]));
            }
        }
        [global::System.Configuration.ApplicationScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.DefaultSettingValueAttribute("5")]
        public string IntervalMinutes {
            get {
                return ((string)(this["IntervalMinutes"]));
            }
        }
    }
}

在应用程序代码中使用包装类来访问和修改配置设置。例如,下面的代码用于检索存储在名为 BigTeam_WindowsService_JoinJobService_SecurityService用户设置中的 WebService的URL。BigTeam.WindowsService.Properties.Settings setting = new BigTeam.WindowsService.Properties.Settings(); string urlSettings = setting.BigTeam_WindowsService_JoinJobService_SecurityService; //这里可以从配置文件中获取

 IDE支持虽然可以手动创建配置文件和包装类,但是 Visual Studio 2005 对这两个任务都提供完全的 IDE 支持。在 Visual C# .NET 中,可以通过右键单击解决方案资源管理器中的项目并选择“Properties”来访问设置设计器。在属性页列表中,选择“Settings”。将看到一个设计器,它允许您定义应用程序和用户设置的所有方面。在设计器中保存更改时,Visual C# 会自动创建并填充相应的配置文件。它还将创建一个包装类,并通过 Settings 使该包装类可作为 Settings进行访问。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python

Django中的信号

Django中内置的signal Django中提供了"信号调度",用于在框架执行操作时解耦. 一些动作发生的时候,系统会根据信号定义的函数执行相应的操作 Mo...

21180
来自专栏程序员的碎碎念

拥有了这些工具,你还需要鼠标?

相信大家平时在使用电脑的过程中,总会有一些坏习惯,有时候把强迫症的把文件、软件和图片分类好;有时候先会把文件保存在桌面,然后在放到自己想放的位置;

10910
来自专栏iOS开发攻城狮的集散地

iOS 打包Framework

26550
来自专栏Java成神之路

Struts2配置

a)      window– preferences – myeclipse – servers – tomcat – 6.x

10520
来自专栏aCloudDeveloper

UNIX环境高级编程笔记之进程控制

  本章重点介绍了进程控制的几个函数:fork、exec族、_exit、wait和waitpid等,主要需要掌握的是父进程和子进程之间的运行机制,怎么处理进程的...

206100
来自专栏林德熙的博客

Roslyn 如何使用 MSBuild Copy 复制文件

在 MSBuild 里可以使用很多命令,本文告诉大家如何使用 Copy 这个 Task 来复制文件

14630
来自专栏xiaoheike

Linux下部署solrCloud

这里我只是把我的师兄教我的关于Solrcloud搭建的过程,以及需要注意的地方文档化了。感谢他教会了我很多。

20530
来自专栏lzj_learn_note

Source Insight阅读Android Frameworks源码

最介绍如何使用Source Insight阅读源码之前,推荐一个在线阅读源码的网站grepcode,而且其中查找某个方法在哪些地方有过调用这个小功能还是蛮有用的...

27760
来自专栏bboysoul

树莓派修改swap空间

树莓派的raspbian就是一个linux系统,默认这个系统烧到sd卡里之后是都分好区了的,但是是没有swap分区,只有一个boot分区还有一个系统分区。所以一...

11520
来自专栏葡萄城控件技术团队

ActiveReports 6:如何升级旧版本的项目

ActiveReports for .NET 6.0是报表控件ActiveReports的最新版本,在丰富报表设计功能的同时,还增加了Visual Studio...

20160

扫码关注云+社区

领取腾讯云代金券