本篇博客将介绍C#中Settings的使用。参考:https://docs.microsoft.com/zh-cn/visualstudio/ide/managing-application-settings-dotnet?view=vs-2017

首先介绍一个桌面程序中的例子,当我们新安装一个软件,软件启动后会有例如新手指导等窗体弹出来,每次都需要自己去关闭它。当然这些软件都会提供例如不再显示等功能。当选择不再显示功能后,这些窗体以后再也不显示了。

对于这些设置,可以采用下面的一些方法来存储,自定义XML文件,注册表,当然还可以是C#中自带的Settings文件。推荐使用Settings文件。注册表轻易不要使用,自定义XML在使用时需要解析,可以当备选方案。

下面通过一个例子来展示,

新建一个WPF项目,

蓝色背景的便是Settings,

一个Setting有4个属性Name,Type,Scope,Value。重点讲一下Scope属性,Scope属性有两个值Application,User。这两者区别,Scope值为Application时,对应的Setting在运行时不可以修改。Scope值为User时,对应的Setting在运行时可以修改。

Setting保存位置:当程序编译后,Setting的值保存在<AssemblyName>.exe.config文件中,例如:

在程序中使用Setting,

            // 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个地方存储。

1、app.config配置文件-----程序第一次运行,之前程序未调用save(),在系统中找不到就会从这里获取

2、操作系统--------当settings调用save()保存后。

3、内存----程序启动后,实例化settings对象,该实例在创建的时候从系统(如果系统中没有就如前面提到的从配置文件中获取)读取在内存中。

一旦我们通过VC#给它添加值后,在工程目录下会生成一个 app.config 文件。

那么,这两个东西究竟是什么关系?

添加两个字符串类型的配置值(一个应用程序级,一个是用户级)后:

  • Settings.settings
<?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>
  • app.config
<?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都会提示我们,并自动同步到另一个文件中。

  • Settings.settings 文件的存在的目的是为了生成一个名为 Settings.Designer.cs 的文件,该文件内的类提供了操作配置文件 (比如:program.exe.config) 的封装类。
  • app.config 会被拷贝到应用程序目录下,并变身为 program.exe.config

这样一来,在程序内就可以通过

            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文件

同一个工程中,可以添加多个 .settings 文件,每一个都会生成一个封装类,各对 app.config 中的一部分进行操作。

c#配置文件app.config 与 Settings.settings的更多相关文章

  1. C#的配置文件App.config使用总结 - 转

    http://blog.csdn.net/celte/article/details/9749389 首先,先说明,我使用的app.config 配置文件的格式如下: <?xml version ...

  2. C#的配置文件App.config使用总结

    应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是configuration. ...

  3. 配置文件——App.config文件读取和修改

    作为普通的xml文件读取的话,首先就要知道怎么寻找文件的路径.我们知道一般配置文件就在跟可执行exe文件在同一目录下,且仅仅在名称后面添加了一个.config 因此,可以用Application.Ex ...

  4. 配置文件App.config的使用以及Readonly与Const的对比

    以前我们学习的时候都把连接数据库的连接字符串写在一个类中,因为我们的数据库都在自己电脑上.如果更换数据库地址,需要更改这个类,然后重新编译才可以连接到数据库.现在我们需要将连接字符串当道一个文件中,然 ...

  5. winform程序读取和改写配置文件App.config元素的值

    winform程序读取和改写配置文件App.config元素的值 2016-05-16 17:49 by newbirth, 2412 阅读, 0 评论, 收藏, 编辑 1 2 3 4 5 6 7 & ...

  6. C#中怎样获取默认配置文件App.config中配置的键值对内容

    场景 在新建一个程序后,项目中会有一个默认配置文件App.config 一般会将一些配置文件信息,比如连接数据库的字符串等信息存在此配置文件中. 怎样在代码中获取自己配置的键值对信息. 注: 博客主页 ...

  7. C#----操作应用程序配置文件App.config

    对配置文件的一些疑问: 在应用程序的目录下,有两处值得注意的地方,一个是应用程序根目录下的App.config文件,和bin\debug\name.exe.config 或者 bin\Release\ ...

  8. C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作

    原文 http://www.cnblogs.com/codealone/archive/2013/09/22/3332607.html 应用程序配置文件,对于asp.net是 web.config,对 ...

  9. C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作,无法为请求的 Configuration 对象创建配置文件。

    应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是 App.Config(ExeName.exe.config). 配置文件,对于程序本身来说,就是基础和依据,其本 ...

随机推荐

  1. java线程池(一)

    自JDK5之后,Java推出了一个并发包,java.util.concurrent,在Java开发中,我们接触到了好多池的技术,String类的对象池.Integer的共享池.连接数据库的连接池.St ...

  2. 【OCP-12c】2019年CUUG OCP 071考试题库(78题)

    78.View the exhibit and examine the structure of the CUSTOMERStable. Which two tasks would require s ...

  3. “全栈2019”Java异常第九章:throws关键字详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  4. [Swift实际操作]八、实用进阶-(2)Swift语言中的三种消息传递模式

    本文将通过响应按钮的点击事件,来演示Target-Action消息传递机制,该机制主要用于响应用户的界面操作.打开创建的空白项目.然后在左侧的项目导航区,打开视图控制器的代码文件:ViewContro ...

  5. [科普] 借助 everything 扩展教你屏蔽网址或转发网址

    教你屏蔽网址或转发网址 万恶之源 为什么写这篇文章,俺觉得大家应该是有这个需(bai)求(du)的.只是不知道如何操作... 一.屏蔽网址 1.借助系统自带防火墙 (不推荐) Linux 下有 ipt ...

  6. Common xaml controls(补交作业)

    Common xaml controls 常见的xaml控件: 先上一段代码,把他们基本都实现出来: <Grid Name="MyGrid"> <Button N ...

  7. php pdo prepare真的安全吗

    详见 这里 Let's say I have code like this: $dbh = new PDO("blahblah"); $stmt = $dbh->prepar ...

  8. 【JavaScript】动态原型模式创建对象 ||为何不能用字面量创建原型对象?

    var proto = ""; function Person(name, age, job) { this.name = name; this.age = age; this.j ...

  9. SpringBoot + Scala环境部署

    在pom.xml文件中添加: <dependencies>中 <!-- 添加Scala依赖 --> <dependency> <groupId>org. ...

  10. Log中关于zVideoApp与zChatApp之间的消息传递可以搜索以下字符串

    [CSSBConfIPCAgent::OnMessageReceived]  (这是zVideoApp端的) 和 [CSSBPTIPCListener::OnMessageReceived]      ...