Create a custom configSection in web.config or app.config file
config file:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="FileDepend" type="TestConsole.FileDepend,TestConsole"/> </configSections> <FileDepend> <RootDir path="c:\"></RootDir> <Public> <element file="/1.txt"></element> <element file="/2.txt"></element> </Public> <Modules> <module name="legend"> <element file="/3.txt"></element> <element file="/4.txt"></element> </module> <module name="bookmark"> <element file="/5.txt"></element> <element file="/6.txt"></element> </module> </Modules> </FileDepend> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" /> </startup> </configuration>
FileDepend.cs
using System; using System.Collections.Generic; using System.Configuration; using System.Linq; namespace TestConsole { public class FileDepend : ConfigurationSection { [ConfigurationProperty("RootDir")] private RootDirElement _RootDir => (RootDirElement)base["RootDir"]; [ConfigurationProperty("Public")] private FilesCollection PublicFilesCollection => ((FilesCollection)(base["Public"])); public string RootDir => _RootDir.Name; [ConfigurationProperty("Modules")] public ModulesCollection ModulesCollection => ((ModulesCollection)(base["Modules"])); public IEnumerable<string> PublicFiles => from FileElement v in PublicFilesCollection select v.Name; } public class RootDirElement : ConfigurationElement { [ConfigurationProperty("path", DefaultValue = "", IsKey = true, IsRequired = true)] public string Name => (string)base["path"]; } public class FileElement : ConfigurationElement { [ConfigurationProperty("file", DefaultValue = "", IsKey = true, IsRequired = true)] public string Name => (string)base["file"]; } public class ModuleElement : ConfigurationElement { [ConfigurationProperty("name", DefaultValue = "", IsKey = true, IsRequired = true)] public string Name { get { return (string)base["name"]; } set { base["name"] = value; } } [ConfigurationProperty("", IsDefaultCollection = true)] private FilesCollection Element => (FilesCollection)base[""]; public IEnumerable<string> Files => from FileElement file in Element select file.Name; } [ConfigurationCollection(typeof(ModuleElement))] public class FilesCollection : ConfigurationElementCollection { internal const string PropertyName = "element"; public override ConfigurationElementCollectionType CollectionType => ConfigurationElementCollectionType.BasicMapAlternate; protected override string ElementName => PropertyName; protected override bool IsElementName(string elementName) { return elementName.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase); } public override bool IsReadOnly() { return false; } protected override ConfigurationElement CreateNewElement() { return new FileElement(); } protected override object GetElementKey(ConfigurationElement element) { return ((FileElement)(element)).Name; } public FileElement this[int idx] => (FileElement)BaseGet(idx); public new FileElement this[string idx] => (FileElement)BaseGet(idx); } [ConfigurationCollection(typeof(ModuleElement))] public class ModulesCollection : ConfigurationElementCollection { internal const string PropertyName = "module"; public override ConfigurationElementCollectionType CollectionType => ConfigurationElementCollectionType.BasicMapAlternate; protected override string ElementName => PropertyName; protected override bool IsElementName(string elementName) { return elementName.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase); } public override bool IsReadOnly() { return false; } protected override ConfigurationElement CreateNewElement() { return new ModuleElement(); } protected override object GetElementKey(ConfigurationElement element) { return ((ModuleElement)(element)).Name; } public ModuleElement this[int idx] => (ModuleElement)BaseGet(idx); public new ModuleElement this[string idx] => (ModuleElement)BaseGet(idx); } }
run:
static void Main(string[] args) { var v = ConfigurationManager.GetSection("FileDepend") as FileDepend; var rootDir = v.RootDir; var publicFiles = v.PublicFiles; var legendFiles = v.ModulesCollection["legend"].Files; Console.WriteLine(rootDir); publicFiles.ToList().ForEach(Console.WriteLine); legendFiles.ToList().ForEach(Console.WriteLine); Console.ReadLine(); }
Create a custom configSection in web.config or app.config file的更多相关文章
- 说说Web.Config与App.Config
说到web.config和app.config大家都很熟悉,我们都叫他们配置文件,平时用的多,注意的少.两个有啥区别呢,很简单,一句话:如果是web程序,如webform项目类型和mvc项目类型就是w ...
- 在Web.config或App.config中的添加自定义配置
.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持.最近看到一些项目中还在自定义xml文件做程序的配置,所以忍 ...
- 修改和获取web.config或app.config文件appSettings配置节中的Add里的value属性 函数
1: /// <summary> 2: /// 修改web.config或app.config文件appSettings配置节中的Add里的value属性 3: /// </summ ...
- .NET下对Web.config与App.Config的增删改操作的代码
把代码过程常用的内容做个收藏,下边代码段是关于 .NET下对Web.config与App.Config的增删改操作的代码. <?xml version="1.0" encod ...
- 在Web.config或App.config中的添加自定义配置 <转>
.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持.最近看到一些项目中还在自定义xml文件做程序的配置 ...
- 一个web.Config或app.Config自定义段configSections的示例
一个web.Config或app.Config自定义段configSections的示例 越来越觉得,直接用配置文件app.Config或web.Config配置应用系统的运行参数,比自己做一个xml ...
- .net分布在指定文件夹的web.confgi或者app.config
.Net里面,ConfigurationManager默认读取的是Web.config或者App.config但是,什么都放在这两个文件里面,感觉太多了,也不好管理配置.于是参考了下别人的资料,自己写 ...
- 一个web.Config或app.Config自定义段configSections的示例--转
直接用配置文件app.Config或web.Config配置应用系统的运行参数,比自己做一个xml配置文件,简洁方便得多.这两个配置文件不仅有常见的connectionStrings和appSetti ...
- 配置文件(Machine.config、Web.config、App.config)
Machine.config1.该文件在Windows目录下\Microsoft.net\framework\[version]\Config\2.为了提高性能,该文件只包含不同于默认值的设置.并且定 ...
随机推荐
- Unix/Linux环境C编程入门教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建
1. openSUSE是一款优秀的linux. 2.选择默认虚拟机 3.选择稍后安装操作系统 4.选择linux opensuse 5. 选择默认虚拟机名称 6.设置处理器为双核. 7.内存设置为2 ...
- poj2039---写出c++reverse函数,且且依次输出每一行的第一个、第二个.....
#include <stdio.h> #include <stdlib.h> #include <string.h> void reverse(char *p1,c ...
- WebService-06-CXF与Spring集成
前言 自3月份到一家快递公司之后,就极少有时间来写博客了,进去的第一个周末就加班.做公司的开放平台,协助一个小伙伴写WebService接口,用的就是CXF.正好这个东西曾经使用过.如今快7月了,曾经 ...
- CodeForces Round #179 (295A) - Greg and Array 一个线段树做两次用
线段树的区间更新与区间求和...一颗这样的线段树用两次... 先扫描1~k...用线段树统计出每个操作执行的次数... 那么每个操作就变成了 op. l , op.r , op.c= times* ...
- 通过pull解析器操作安卓的xml
通过pull解析器操作安卓的xml 例子定义了一个javabean用于存放上面解析出来的xml内容, 这个javabean为Person,代码请见本页下面备注: =================== ...
- Asp.net 获取服务器指定文件夹目录文件,并提供下载
string dirPath = HttpContext.Current.Server.MapPath("uploads/"); if (Directory.Exists(dirP ...
- 红豆带你从零学C#系列之:开始C#编程(一)
让我们开始学习C#编程吧 作者:红豆西米露 交流QQ:937802080 前面的文章里给大家介绍了C#语言的一些基本认识,现在我们来开始做一个小程序吧! 在这里以我们以“控制台应用程序”来作演示. P ...
- [C#参考]事件机制
还是那个项目,为了降低程序的耦合性,我决定小小的重构一下自己原来的代码,把Socket通信和帧的分析这两部分分别封装成一个类,当然线程没有变,只是封装了一下,为的就是模块测试完容易拼接.这也是我打算降 ...
- Linux命令之修改主机名
ubuntu永久修改主机名 1.查看主机名 在Ubuntu系统中,快速查看主机名有多种方法: 其一,打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后: 其二,在终端 ...
- js命名空间的使用
js命名空间的使用: test.html 代码如下: <!DOCTYPE HTML><html lang="en-US"><head> & ...