c#app.config 与 Settings.settings

本篇博客将介绍C#中Settings的使用。

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

对于这些设置,可以采用下面的一些方法来存储,自定义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\Roaming\微软中国\IntelligentGet.dll_Url_4e1wbw1oe2fpsm1rmlrbj4nuwvigphrb\1.0.0.0\user.config

这些文件中。

多个.settings文件

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

原文地址:https://www.cnblogs.com/xiaohua19920/p/9642052.html

时间: 2024-10-07 07:21:05

c#app.config 与 Settings.settings的相关文章

C#读写app.config中的数据

C#读写app.config中的数据 读语句: String str = ConfigurationManager.AppSettings["DemoKey"]; 写语句: Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); cfa.AppSettings.Settings["DemoKey"].Value = "DemoVa

App.Config详解

App.Config详解 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是configuration.我们经常访问的是appSettings,它是由.Net预定义配置节.我们经常使用的配置文件的架构是象下面的形式.先大概有个印象,通过后面的实例会有一个比较清楚的认识.下面的“配置节”可以理解为进行配置一个XML的节点. 1.  向项目添加 app.config 文件: 右击

C# 对 App.config的appSettings节点数据进行加密

.NET平台下的Winform和Asp.net的配置文件默认都是明文保存的,本文使用的是.Net自身如何加密配置文件,不包含自定义的加密规则 但.Net是提供了直接对配置文件加密的功能的,使用.Net加密的配置节在读取时不需要手动解密,.Net会自行解密并返回解密后的数据. 加密后的数据会保存到一个单独的配置节点里(不管加密的节点下有多少子项,加密后的数据都在CipherValue 里) .Net是按照节点来进行加密的,所以如果给像appSettings这样的节点加密,那么该节点下面的所有数据都

C# App.Config详解

应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是configuration.我们经常访问的是appSettings,它是由.Net预定义配置节.我们经常使用的配置文件的架构是象下面的形式.先大概有个印象,通过后面的实例会有一个比较清楚的认识.下面的“配置节”可以理解为进行配置一个XML的节点.1.向项目添加app.config文件: 右击项目名称,选择“添加”→“添加新建项

基于Debug模式windows应用程序app.config设置

介绍 当我们开发Windows窗体应用程序,我们肯定会利用App.config的.我们可以添加,修改和删除键/值对管理用户首选项.在这里,将会节省你的时间. 演示 这里有一个简单的Windows窗体应用程序来展示如何添加一个密钥对到App.config文件.我建立的Visual Studio 2015年这里面的Windows窗体应用程序. using System; using System.Collections.Generic; using System.ComponentModel; us

C# 中的 App.config 文件配置

应用程序配置文件,对于asp.net是 web.config对于WINFORM程序是 App.Config(ExeName.exe.config). 配置文件,对于程序本身来说,就是基础和依据,其本质是一个xml文件,对于配置文件的操作,从.NET 2.0 开始,就非常方便了,提供了 System [.Web] .Configuration 这个管理功能的NameSpace,要使用它,需要添加对 System.configuration.dll的引用. 对于WINFORM程序,使用 System

WinForm修改App.config配置文件功能

WinForm修改App.config配置文件主要是通过System.Configuration.dll里ConfigurationManager类来实现,在功能开发前是需要手动引用该dll文件. ConfigurationManager 类包括可用来执行以下任务的成员: ?从配置文件中读取一个节.若要访问配置信息,请调用 GetSection 方法.对于某些节,例如 appSettings 和 connectionStrings,请使用 AppSettings 和 ConnectionStri

项目文件中含有两个config文件,app.config与app1.config,如何获取app1.config中的配置

想要通过配置文件配置C#前台画面,好奇做了以下测试:在项目中新建了app.config与app1.config两个配置文件,请教一下各位高手如果想从app1.config中读取配置信息应该如何读取?采用ConfigurationManager.AppSettings 属性似乎只能读取到app.config的配置信息. ExeConfigurationFileMap map = new ExeConfigurationFileMap(); map.ExeConfigFilename = @"D:\

App.config的学习笔记

昨天基本弄清config的使用之后,再看WP的API,晕了.结果WP不支持system.configuration命名空间,这意味着想在WP上用App.config不大可能了. WP具体支持API请查看 .net WP API API reference 不过还是记录下App.config的使用. 有很大部分是从MSDN学来的,如果有人看我的这篇文章的话可以先去看看MSDN的相关章节 http://msdn.microsoft.com/en-us/library/system.configura