当前位置:
首页 > temp > python入门教程 >
-
.Net App.Config 读取
经常能在.Net 项目中看到App.Config/Web.Config , 一直没有了解过.Net 自带的对配置文件的读写操作,常规的操作类在 System.Configuration.dll 中 ,比较重要的类为ConfigurationManager
底部有全部代码+单元测试
AppSetting 及 ConnectionString 的读取
|
|
|
<configuration> |
|
<configSections> |
|
<sectionGroup name="MyGroup" type="AppConfig.MyGroup,Appconfig"> |
|
<section name="MySection" type="AppConfig.MySection,Appconfig" /> |
|
</sectionGroup> |
|
<section name="MySection" type="AppConfig.MySection,Appconfig" /> |
|
</configSections> |
|
<appSettings> |
|
<add key="A" value="a"/> |
|
<add key="B" value="b"/> |
|
<add key="C" value="c"/> |
|
</appSettings> |
|
<connectionStrings> |
|
<add connectionString="123" name="1"/> |
|
<add connectionString="456" name="2"/> |
|
</connectionStrings> |
|
<MySection Code="asdas"> |
|
<Member Id="dasd"/> |
|
<Members> |
|
<add Id="1"/> |
|
<add Id="2"/> |
|
<add Id="3"/> |
|
</Members> |
|
</MySection> |
|
<MyGroup> |
|
<MySection Code="asdas1"> |
|
<Member Id="dasd1"/> |
|
<Members> |
|
<add Id="12"/> |
|
<add Id="22"/> |
|
</Members> |
|
</MySection> |
|
</MyGroup> |
|
</configuration> |
指定AppSetting 的 读取
|
public string GetAppSettingValue(string appSettingName) |
|
{ |
|
return ConfigurationManager.AppSettings.AllKeys.FirstOrDefault(item => item.Equals(appSettingName)) != null ? ConfigurationManager.AppSettings[appSettingName] : null; |
|
} |
指定ConnecString的获取
|
public string GetConnectString(string name) |
|
{ |
|
return ConfigurationManager.ConnectionStrings[name]?.ConnectionString; |
|
} |
自定义内容的读取
- ConfigurationSection
- ConfigurationElement
- ConfigurationSectionGroup
- ConfigurationElementCollection
ConfigurationSection
表示配置文件中的节。
|
// 自定义一个Section |
|
internal class MySection : ConfigurationSection |
|
{ |
|
[ConfigurationProperty(nameof(Code))] |
|
public string Code |
|
{ |
|
get => base[nameof(Code)].ToString(); |
|
} |
|
} |
需要在属性上使用ConfigurationPropertyAttribute
|
//调用方法 |
|
public string GetMySectionCode() |
|
{ |
|
return (ConfigurationManager.GetSection("MySection") as MySection)?.Code; |
|
} |
ConfigurationElement
表示Section的成员
|
//根据Config 配置属性 |
|
public class MyElement : ConfigurationElement |
|
{ |
|
[ConfigurationProperty(nameof(Id))] |
|
public string Id |
|
{ |
|
get => this[nameof(Id)].ToString(); |
|
} |
|
} |
|
//同时在MySection 中进行扩展 |
|
internal class MySection : ConfigurationSection |
|
{ |
|
... |
|
[ConfigurationProperty(nameof(Member))] |
|
public MyElement Member |
|
{ |
|
get => base[nameof(Member)] as MyElement; |
|
} |
|
... |
|
} |
|
//调用方法 |
|
public string GetMySectionMember() |
|
{ |
|
return (ConfigurationManager.GetSection("MySection") as MySection)?.Member?.Id; |
|
} |
ConfigurationElementCollection
表示Element的集合
|
//定义一个MyElement 的集合 |
|
[ConfigurationCollection(typeof(MyElement))] |
|
internal class MyElementCollection : ConfigurationElementCollection |
|
{ |
|
protected override ConfigurationElement CreateNewElement() |
|
{ |
|
return new MyElement(); |
|
} |
|
|
|
protected override object GetElementKey(ConfigurationElement element) |
|
{ |
|
return (element as MyElement).Id; |
|
} |
|
} |
|
//在Section 中进行填充 |
|
internal class MySection : ConfigurationSection |
|
{ |
|
[ConfigurationProperty(nameof(Members)), ConfigurationCollection(typeof(MyElement))] |
|
public MyElementCollection Members |
|
{ |
|
get => base[nameof(Members)] as MyElementCollection; |
|
} |
|
} |
|
//调用 |
|
public int GetMySectionMembers() |
|
{ |
|
return (int)(ConfigurationManager.GetSection("MySection") as MySection)?.Members?.Count; |
|
} |
ConfigurationSectionGroup
在Section 外面在套一个类
|
public class MyGroup : ConfigurationSectionGroup |
|
{ |
|
[ConfigurationProperty(nameof(MySection))] |
|
public MySection MySection { get => this.Sections[nameof(MySection)] as MySection; } |
|
} |
|
// 两种调用方式都可以 |
|
public int GetMySectionMembersInGroup() |
|
{ |
|
return (int)(ConfigurationManager.GetSection("MyGroup/MySection") as MySection)?.Members?.Count; |
|
} |
|
public int GetMySectionMembersInGroupByOpenConfig() |
|
{ |
|
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); |
|
var group = (MyGroup)config.GetSectionGroup("MyGroup"); |
|
return group.MySection.Members.Count; |
|
} |
处理不是默认名字的Config 文件
|
ExeConfigurationFileMap exeConfigurationFileMap = new ExeConfigurationFileMap() { ExeConfigFilename = @".\App1.config" }; |
|
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(exeConfigurationFileMap,ConfigurationUserLevel.None); |
这边加载方式与上面的不同 后续一致
出处:https://www.cnblogs.com/dongyaosheng/p/16982434.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数