App.config配置详解

经上一篇文章https://www.cnblogs.com/luna-hehe/p/9104701.html发现自己对配置文件很是不了解,同样还是查了半天终于发现另一片宝贵文档https://www.cnblogs.com/ysz12300/p/5509576.html  和 https://blog.csdn.net/z702143700/article/details/45913797 和 http://www.cnblogs.com/jhxk/articles/1609182.html(可能是自己用错关键字查询);

在此只作为自己学习记录的笔记

  配置文件一般分为内置配置文和用户自定义配置文件。

      内置配置文件包括app.config、web.config、Settings.settings( 这个用的不多,操作也很简单,在此不详细叙述)等等。

   用户自定义配置文件一般是将配置信息放到XML文件或注册表中,配置信息一般包括程序设置,记录运行信息,保存控件的信息(比如位置,样式)。

一、内置配置文件操作

app.config和web.config操作类似,以app.config为例,Settings.settings能够指定值的类型和范围

1.app.config文件操作

该配置文件中主要的节点有:connectionStrings、appSettings、configSections等,这几个属于常用,操作都略有不同,DotNet提供直接操作各个节点的方法。在用到ConfigurationManager时要添加system.configuration.dll程序集的引用。

程序移植后配置文件的修改会保存在.exe.config的文件中,但是根据我经验如果你不修改配置文件,一般exe不自动创建一个.exe.config的文件。

在项目进行编译后,在bin\Debuge文件下,将出现两个配置文件,一个名为“*.EXE.config”,另一个名为“*.vshost.exe.config”。第一个文件为项目实际使用的配置文件,在程序运行中所做的更改都将被保存于此;第二个文件为原代码“app.config”的同步文件,在程序运行中不会发生更改。

1)默认App.config

1 <?xml version="1.0" encoding="utf-8" ?>
2 <configuration>
3     <startup> 
4         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
5     </startup>
6 </configuration>

说明:无论我是建Windows窗体应用程序,还是控制台应用程序,还是Windows服务默认生成的App.config文件都是长这样的。

2)  connectionStrings 配置节:用于设置数据库连接字符串
请注意:如果您的 SQL 版本为 2005 Express 版,则默认安装时 SQL 服务器实例名为localhost/SQLExpress ,须更改以下实例中“ Data Source=localhost; ”一句为“ Data Source=localhost/SQLExpress; ”,在等于号的两边不要加上空格。
<!-- 数据库连接串 -->
< connectionStrings >
   < add name = "conJxcBook " connectionString = "Data Source=localhost;Initial Catalog=jxcbook;User ID=sa;password=******** " providerName = "System.Data.SqlClient " />
</ connectionStrings >

下面为我自己的项目中的代码(我本地SQL版本为2012,服务器SQL版本为2008R2,与上面所述不太一样):

 <connectionStrings>
    <add name="ConnectionStringMain" connectionString="Data Source=192.168.1.211;Initial Catalog=WLZhuJianMes;Persist Security Info=True;User ID=sa;Password=sa;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
 </connectionStrings>
从App.config中读取链接字符串:
ConfigurationManager.ConnectionStrings["ConnectionStringMain"].ConnectionString;

往App.config中写入链接字符串

//设置连接字符串  
  
ConnectionStringSettings setConnStr = newConnectionStringSettings("AccessDB", connectionString,"System.Data.OleDb");  
  
//打开当前应用程序的app.config文件,进行操作  
  
Configuration appConfig =ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);  
  
//由于没有更新连接字符串的方法,所以这里直接再添加一个连接字符串  
  
appConfig.ConnectionStrings.ConnectionStrings.Add(setConnStr);  
  
appConfig.Save();  
  
// 强制重新载入配置文件的ConnectionStrings配置节  
  
ConfigurationManager.RefreshSection("connectionStrings");  
3) appSettings 配置节:主要用于整个程序的配置,以键值对的形式出现
appSettings 配置节为整个程序的配置,如果是对当前用户的配置,请使用 userSettings 配置节,其格式与以下配置书写要求一样。
 
< appSettings >
   < add key = "userName "value = "" />
   < add key = "password "value = "" />
   < add key = "Department "value = "" />
   < add key = "returnValue "value = "" />
   < add key = "pwdPattern "value = "" />
   < add key = "userPattern "value = "" />
</ appSettings >

在预定义的 appSettings 节(注意大小写),有很多的元素,这些元素名称都是“add”,有两个属性分别是“key”和“value”。

.NET 提供了对appSettings节的访问方法。在 .NET 1.0 和 1.1 版本中,可以使用 System.Configuration.ConfigurationSettings.AppSettings["Key"] 来对 key = "Key" 的<add>元素的 value属性 进行访问。

注意:现在.Net FrameWork 2.0中已经明确表示此ConfigurationSettings属性已经废弃,建议改为 ConfigurationManager 或 WebConfigurationManager。

使用 System.Configuration.ConfigurationManager,需要在工程里添加对 system.configuration.dll 程序集的引用。(在解决方案管理器中右键点击工程名称,在右键菜单中选择添加引用,在.NET选项卡下即可找到。)

添加引用后,就可以用 ConfigurationManager.AppSettings["Key"] 来读取对应的值了.

但是,ConfigurationManager.AppSettings 属性是只读的,并不支持修改属性值。这是因为据说微软不太建议我们动态写入app.config文件,而是建议手工配置后,在程序运行时只做静态访问。

如果实在需要在程序中进行修改,也即写入App.Config,请往下看。

读:

String str = ConfigurationManager.AppSettings["userName"];  

读取App.config文件的appSettings节的方法比较简单,可以通过上文中 System.Configuration.ConfigurationManager.AppSettings["Key"]的方法进行访问,但前面也已经说了,该方法不提供写入。

如果希望写入配置文件,可以使用ConfigurationManager对象执行打开配置文件的操作后,将会返回一个Configuration的对象,利用该对象进行操作(增删改查都可以哦)。

下面给出实现的代码(增加引用using System.Configuration名称空间)

写:

private void AccessAppSettings()
{
    //获取Configuration对象
    Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    //根据Key读取<add>元素的Value
    string name = config.AppSettings.Settings["name"].Value;
    //写入<add>元素的Value
    config.AppSettings.Settings["name"].Value = "fx163";
    //增加<add>元素
    config.AppSettings.Settings.Add("url", "http://www.fx163.net");
    //删除<add>元素
    config.AppSettings.Settings.Remove("name");
    //一定要记得保存,写不带参数的config.Save()也可以
    config.Save(ConfigurationSaveMode.Modified);
    //刷新,否则程序读取的还是之前的值(可能已装入内存)
    System.Configuration.ConfigurationManager.RefreshSection("appSettings");
}

需要注意的是:

1、根据并不存在的Key值访问<add>元素,甚至使用remove()方法删除不存在的元素,都不会导致异常,前者会返回null。

2、add已经存在的<add>元素也不会导致异常,而是concat了已有的Value和新的Value,用","分隔,例如:"olldvalue,newvalue"。

3、特别注意大小写(XML文件是区分大小写的),例如appSettings配置节。

4、可能有读者会想到,既然app.config是标准XML,当然也可以用操纵一般XML文件的方法来读写。这当然是可以的!只不过我认为这样就失去了VS提供app.config文件的意义了,还不如自己定义一个配置文件方便。

4).configSections自定义配置节:自定义configSections,可以自行定义节元素,扩展了appSettings一个节的功能

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="quartz" type="System.Configuration.NameValueSectionHandler"/>
    <section name="sampleSection1" type="System.Configuration.SingleTagSectionHandler"/>
    <section name="sampleSection2" type="System.Configuration.DictionarySectionHandler"/>
  </configSections>
  
  <quartz>
    <add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler"/>
    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
    <add key="quartz.threadPool.threadCount" value="10"/>
    <add key="quartz.threadPool.threadPriority" value="2"/>
    <add key="quartz.jobStore.misfireThreshold" value="60000"/>
    <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz"/>
    <!--******************************Plugin配置*********************************************-->
    <add key="quartz.plugin.xml.type" value="Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz" />
    <add key="quartz.plugin.xml.fileNames" value="~/quartz_jobs.xml"/>
  </quartz>

  <sampleSection1 setting1="Value1" setting2="value two" setting3="third value" />

  <sampleSection2>
    <add key="add" value="id=1"/>
    <add key="edit" value="id=2"/>
  </sampleSection2>

name属性:指的是自定义配置节的名称,即自定义的这个section的名字,

type属性:指的是自定义配置节的类型,即用于接收这个section中相应字段的类,主要包括:System.Configuration.SingleTagSectionHandler;System.Configuration.DictionarySectionHandler;System.Configuration.NameValueSectionHandler;不同的type不但设置配置节的方式不一样,最后访问配置文件的操作上也有差异

在程序中如何访问这些自定义的配置节,我们用ConfigurationSettings类的静态方法GetConfig来获取自定义配置节的信息

//访问配置节sampleSection1  
  
IDictionary IDTest1 =(IDictionary)ConfigurationSettings.GetConfig("sampleSection1");  
  
string str = (string)IDTest1["setting1"]+" "+(string)IDTest1["setting2"];  
  
MessageBox.Show(str);//输出  
  
//访问配置节sampleSection1的另一个方法
string[] values1=new string[IDTest1.Count];  
IDTest1.Values.CopyTo(values1,0);   
MessageBox.Show(values1[0]+""+values1[1]); //输出
  
//访问配置节sampleSection2  
  
IDictionary IDTest2 =(IDictionary)ConfigurationSettings.GetConfig("sampleSection2");  
  
string[] keys=new string[IDTest2.Keys.Count];  
  
string[] values=new string[IDTest2.Values.Count];  
  
IDTest2.Keys.CopyTo(keys,0);  
  
IDTest2.Values.CopyTo(values,0);  
  
MessageBox.Show(keys[0]+" "+values[0]); //输出 
  
//访问配置节quartz  
  
NameValueCollectionnc=(NameValueCollection)ConfigurationSettings.GetConfig("quartz");  
  
MessageBox.Show(nc.AllKeys[0].ToString()+""+nc["Hello"]); //输出HelloWorld 
配置节处理程序返回类型
SingleTagSectionHandlerSystems.Collections.IDictionary
DictionarySectionHandlerSystems.Collections.IDictionary
NameValueSectionHandlerSystems.Collections.Specialized.NameValueCollection

5)sectionGroup:自定义配置节组

配置节组是使用<sectionGroup>元素,将类似的配置节分到同一个组中。配置节组声明部分将创建配置节的包含元素,在<configSections>元素中声明配置节组,并将属于该组的节置于<sectionGroup>元素中。下面是一个包含配置节组的配置文件的例子:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="TestGroup" >
      <section name="Test" type="System.Configuration.NameValueSectionHandler"/>
    </sectionGroup>
  </configSections>
  
  <TestGroup>
    <Test>
      <add key="Hello" value="World"/>
    </Test>
  </TestGroup>

下面是访问这个配置节组的代码:

NameValueCollectionnc=(NameValueCollection)ConfigurationSettings.GetConfig("TestGroup/Test");

MessageBox.Show(nc.AllKeys[0].ToString()+""+nc["Hello"]);    //输出HelloWorld

 



转载于:https://www.cnblogs.com/luna-hehe/p/9104748.html

C# WinForms与SQL Server数据库连接全指南:App.config配置详解与实战优化 在 C# WinForms 应用程序中配置 SQL Server 数据库连接时,App.config文件是存储数据库连接字符串和其他配置信息的核心文件。 阅读详情

相关推荐

C#配置文件App.config.settings详解:原理、区别与应用场景

.NET应用程序开发中,配置文件管理是构建可维护、可部署软件系统的关键技术环节。其核心原理在于通过结构化方式存储应用程序的运行时参数,实现行为的外部化控制,从而提升系统的灵活性和环境适应性。从技术价值角度看,良好的配置管理能显著降低代码与环境的耦合度,支持多环境部署(如开发、测试、生产),并增强应用的安全性。在工程实践中,配置系统通常需要兼顾通用性、类型安全性和开发体验。具体到C#和.NET Framework技术栈,开发者常会遇到App.config.settings文件这两种配置管理方式。App.c

weixin_30298497的博客 363

AppConfig:为各种环境配置应用程序的应用程序

AppConfig - 应用程序和属性配置 创建此应用程序是为了通过引入允许持续交付的工具来启动 Aon eSolution 的 DevOps 运动。 从本质上讲,AppConfig 只允许以下结构: 应用 环境特性 这种结构有一个很好的编辑 UI,以及支持它的 RESTful API,用于与应用程序的简单集成。 到目前为止,写了两个客户端: Java客户端 Facter 客户端(用于 Puppet) 除了简单的属性编辑之外,系统还允许环境扩展。 例如,我们可能有一个示例设置如下 AppConfig(应用程序) 默认 发展 质量 生产 在这种情况下,Development、Quality 和 Production 将从 Default 继承属性,并且可以覆盖特定于环境的设置...例如数据库 URL 和密码。 此层次结构可以根据需要具有多个级别。 AppConfig 中还包含一个强

C#封装系列---②App.config配置文件详解(如何对配置文件的配置节进行分组取值)

一、什么是配置文件? 配置文件是用来存储相关软件的一些信息,如初始化的信息,初始路径,账号,变量等等。方便程序的移植与扩展。 二、配置文件里一般放什么? 配置文件里放程序启动时需要对程序进行配置的信息,比如我们平时启动刚安装的一款软件时,会出现一些填写注册信息的控件,并询问您是否要勾选记住密码、下次自动登录等的复选框(比如QQ、微信),这些注册信息就被写进了相应程序的配置文件里,当程序下次在...

Elsa~的博客 1049

APP.Config配置文件

目录目录 背景 什么是配置文件 在哪里创建配置文件 connectionStrings 配置appSettings 配置节 读取与更新 appconfig 1 读取connectionStrings配置节 2 更新connectionStrings配置节 3 读取appStrings配置节 4 更新connectionStrings配置节背景  最近在程序开发过程中总是用

程金鹏(程利鹏) 6245

配置文件的读写

1 Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 2 config.AppSettings.Settings.Remove("sqlStr"); 3 config.AppSettings.Sett...

weixin_33713350的博客 340

关于C# app.config的读写及配置汇总

关于C# app.config的读写及配置汇总

Blue 2045

c# mysql app.config_C# 操作配置文件 App.config详解

C# 操作配置文件 App.config详解using System;using System.Collections.Generic;using System.Text;using System.Configuration;namespace Schwann.CommLibrary{public class ConfigHelper{/// /// 根据键值获取配置文件/// /// 键值/...

weixin_42659791的博客 268

.NET访问配置文件app.config的功能详解

注:如本网转载的教程文章涉及版权等问题,请作者与我联系,我将在第一时间删除。谢谢! 联络邮箱(Contact E-mail):wzskynet#163.com ·ASP.NET MVC :实现我们自己的视图引擎 ·WPF自定义漂亮的按钮样式 ·装箱、转型、方法调用他们究竟有什么区别? ·使用Ajax后,原来导出功能失败的解决方法 ·ASP.NET将物件序列化成Binary储存至DB

云海唯C的专栏 1630

wechat-app-mall配置管理:config.js配置文件详解

在微信小程序开发中,配置管理是项目成功的关键因素之一。`wechat-app-mall`作为一款成熟的微信小程序商城框架,其核心配置文件`config.js`承载着整个项目的关键配置信息。本文将深入解析这个看似简单却至关重要的配置文件,帮助你全面掌握项目配置的精髓。 ## config.js文件结构全解析 ### 基础配置模块 ```javascript module.exports = {...

gitblog_00419的博客 972

Docus配置管理完全手册:app.config.ts的每一个参数详解

Docus是一款基于Nuxt和Markdown的文档编写工具,通过app.config.ts配置文件可以轻松自定义文档的外观和功能。本文将详细解析app.config.ts中的每一个参数,帮助你打造专属的文档系统。 ## 配置文件概览 Docus项目中存在两个关键的配置文件,分别位于不同目录: - 核心配置:[layer/app/app.config.ts](https://link.gitc

gitblog_00190的博客 474

webconfig的解决方案怎么添加_解决在Web.configApp.config中添加自定义配置的方法详解...

文档从网络中收集,已重新整理排版.word版本可编辑.欢迎下载支持.1word版本可编辑.欢迎下载支持.解决在Web.configApp.config中添加自定义配置的方法详解本篇文章是对在Web.configApp.config中添加自定义配置的方法进行了详细的分析介绍,需要的朋友参考下.Net中的System.Configuration命名空间为我们在web.config或者app.con...

weixin_39963465的博客 332

App.config配置文件详解(如何对配置文件的配置节进行分组取值)

...

胡振涛 929

web-app-template 构建配置详解:vite.config.ts 的 Vite+ 深度剖析

web-app-template 是一个主打 "Minimal, sensible defaults, fast."(极简、合理的默认配置、快速)的 React 前端模板,它把 Vite、React 19、TypeScript、Tailwind CSS 全部整合进一个开箱即用的工程。而这一切的"大脑",就是根目录下的 [vite.config.ts](https://link.gitcode.co

gitblog_00564的博客 845

[From Network].NET访问配置文件app.config的功能详解

 在.Net中提供了配置文件,让我们可以很方面的处理配置信息,这个配置是XML格式的。而且.Net中已经提供了一些访问这个文件的功能。1、读取配置信息下面是一个配置文件的具体内容:           .net提供了可以直接访问(注意大小写)元素的方法,在这元素中有很多的子元素,这些子元素名称都是 “add”,有两个属性分别是“key”和“value”。一般情况下我们可以将自己的配置

cyuone的专栏 442

WinForm教程(一)App.config配置文件

最近又回到用WinForm开发项目,难免少不了跟数据库打交道。平时也会在App.config中写连接字串,但没有仔细深究过,当然除了写数据库字串,肯定还能写别的,我们无论在控制台程序还是窗体程序,都会遇见他,乘代码敲累之际,写篇博客平缓下。 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的。它是按需更改,开发人员可以使用配置文件来更改设置,而不必重编译应用程序。配置文件又...

鱼骨头科技 1万+

Una UI配置完全指南:nuxt.configapp.config的12个关键配置

想要快速上手 **Una UI配置**,让这套基于 Unocss 引擎的原子化 UI 框架真正"长"成你项目的模样?本文为你梳理 nuxt.configapp.config 中的 12 个关键配置项,从组件前缀、全局注册到主色、圆角、侧边栏宽度,全部一次讲透,照着抄就能用。 [![Una UI 原子化 UI 框架主视觉图](https://raw.gitcode.com/gh_mirror

gitblog_00513的博客 363

告别配置混乱:Nuxt.js app.config.ts完全掌握指南

你是否还在为Nuxt.js项目中的配置管理头疼?是否经常分不清nuxt.config.ts和app.config.ts的区别?本文将彻底解决这些问题,带你掌握Nuxt.js应用配置的核心工具——app.config.ts,让你的项目配置清晰可控。读完本文后,你将能够:正确区分两种配置文件的用途、熟练创建和使用app.config.ts、实现配置的响应式访问、掌握环境变量结合使用的技巧。 ## a...

gitblog_00397的博客 426
上一篇: App.config:配置系统未能初始化的异常
下一篇: Log4Net配置详解
diaozhu8194
博客等级 码龄10年 0粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值