本篇博客将介绍C#中Settings的使用。参考:https://docs.microsoft.com/zh-cn/visualstudio/ide/managing-application-settings-dotnet?view=vs-2017app
首先介绍一个桌面程序中的例子,当咱们新安装一个软件,软件启动后会有例如新手指导等窗体弹出来,每次都须要本身去关闭它。固然这些软件都会提供例如再也不显示等功能。当选择再也不显示功能后,这些窗体之后不再显示了。ide
对于这些设置,能够采用下面的一些方法来存储,自定义XML文件,注册表,固然还能够是C#中自带的Settings文件。推荐使用Settings文件。注册表轻易不要使用,自定义XML在使用时须要解析,能够当备选方案。ui
下面经过一个例子来展现,this
新建一个WPF项目,spa
蓝色背景的即是Settings,操作系统
一个Setting有4个属性Name,Type,Scope,Value。重点讲一下Scope属性,Scope属性有两个值Application,User。这二者区别,Scope值为Application时,对应的Setting在运行时不能够修改。Scope值为User时,对应的Setting在运行时能够修改。code
Setting保存位置:当程序编译后,Setting的值保存在<AssemblyName>.exe.config文件中,例如:orm
在程序中使用Setting,xml
// Modify the setting value Properties.Settings.Default.DisplayGuide = false; // Save setting value Properties.Settings.Default.Save();
其中,Settings里的属性根据范围分为两种 “用户”和“应用程序”(其中:应用程序级配置是只读的,而用户级是可读写的。)对象
范围为“应用程序”的属性,读取都是从APP.CONFIG里获取,设置也能够经过手工修改App.config改变,可是在程序中没法对其进行赋值,只能读取。
而范围为“用户”的属性 Settings 在第一次运行时会读取App.config里的初始值
可是一旦调用Save方法后,Settings里“用户”范围的属性就会保存在系统里面,相似WebForm里的Cookies同样
今后之后,读取都会从系统里保存的值里读取,手工修改App.config里的“用户”范围的属性不会影响到这些属性,可是在调用Reset方法时会重新从App.config里获取“用户”范围的属性写入到系统中。
也就是说,settings里“用户”范围的属性总共有3个地方存储。
一、app.config配置文件-----程序第一次运行,以前程序未调用save(),在系统中找不到就会从这里获取
二、操做系统--------当settings调用save()保存后。
三、内存----程序启动后,实例化settings对象,该实例在建立的时候从系统(若是系统中没有就如前面提到的从配置文件中获取)读取在内存中。
一旦咱们经过VC#给它添加值后,在工程目录下会生成一个 app.config 文件。
那么,这两个东西到底是什么关系?
添加两个字符串类型的配置值(一个应用程序级,一个是用户级)后:
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="WpfApplication1.Properties" GeneratedClassName="Settings"> <Profiles /> <Settings> <Setting Name="thisIsAppSettings" Type="System.String" Scope="Application"> <Value Profile="(Default)">dbzhang800</Value> </Setting> <Setting Name="thisIsUserSettings" Type="System.String" Scope="User"> <Value Profile="(Default)">1+1=2</Value> </Setting> </Settings> </SettingsFile>
<?xml version="1.0" encoding="utf-8" ?>
<configuration> <configSections> <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > <section name="WpfApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> </sectionGroup> <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > <section name="WpfApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </sectionGroup> </configSections> <userSettings> <WpfApplication1.Properties.Settings> <setting name="thisIsUserSettings" serializeAs="String"> <value>1+1=2</value> </setting> </WpfApplication1.Properties.Settings> </userSettings> <applicationSettings> <WpfApplication1.Properties.Settings> <setting name="thisIsAppSettings" serializeAs="String"> <value>dbzhang800</value> </setting> </WpfApplication1.Properties.Settings> </applicationSettings> </configuration>
尽管都是 xml 文件,两个文件的风格大相径庭,后者 app.config 就是咱们前一篇中介绍到了 Configuration 文件,从它的configSections中能够看出它有两个自定义段,分别叫applicationSettings 和 userSettings
操做这样的一个文件,咱们能够建立ConfigurationManager命名空间中的ConfigurationSection的派生类,而后经过该类进行操做。
Settings.settings 看起来至关的简洁,并且和app.config相比,它包含有配置值的类型(好比:Type="System.String")。
并且,不管咱们修改Settings.settings仍是app.config,Visual studio都会提示咱们,并自动同步到另外一个文件中。
这样一来,在程序内就能够经过
Properties.Settings.Default.thisIsUserSettings = "999999999";
console.WriteLine(Properties.Settings.Default.thisIsAppSettings); Properties.Settings.Default.Save();
来操做配置文件了。
用户配置会被写入到
C:\Users\Administrator\AppData\Local\“项目名称”\WPFUserSetting.exe_Url_v4wjaifsqnskfnd0x5zhrlngptsdqoii\1.0.0.0\user.config
这些文件中。
同一个工程中,能够添加多个 .settings 文件,每个都会生成一个封装类,各对 app.config 中的一部分进行操做。