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.为了提高性能,该文件只包含不同于默认值的设置.并且定 ...
随机推荐
- Oracle EBS-SQL (GL-5):从发票追溯到接收
SELECT destination_type_code, distribution_line_number, line_type, amount,vat_code, tax_code_id, tax ...
- eclipse中使用EasyExplorer插件定位文件 [转载]
如果你经常需要在Eclipse里打开相关资源文件所在的文件夹,比较麻烦,要右键,属性,在Location一栏中把所在的文件夹拷贝一下,然后再去资源管理器里输入这个路径,回车,打开它. 解决方法: 用E ...
- 兔子--Android中的五大布局
LinearLayout:被称为线性布局,分为水平和垂直,设置的垂直或水平的属性值,来排列全部的子元素.全部的子元素都被堆放在其他元素之后,因此一个垂直列表的每一行仅仅会有一个元素,而无论他们有多宽, ...
- Swift 闭包表达式
闭包是功能性自包含模块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C 中的 blocks 以及其他一些编程语言中的 lambdas 比较相似. 闭包的形式主要有三 ...
- AndroidContentProvider ContentResolver和ContentObserver的使用
1.ContentProvider.ContentResolver和ContentObserver ContentProvider是Android的四大组件之一,可见它在Android中 的作用非同小 ...
- HDU1963 && POJ2063:Investment(完全背包)
Problem Description John never knew he had a grand-uncle, until he received the notary’s letter. He ...
- select2插件常用方法汇总
1.获取下拉框的value和text <input type="hidden" name="xa" id="xa" data-plac ...
- 今年暑假不AC1
Description "今年暑假不AC?" "是的." "那你干什么呢?" "看世界杯呀,笨蛋!" " ...
- div模拟滚动条
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="html.aspx.cs&q ...
- codeforces 547B. Mike and Feet 单调栈
题目链接 用单调栈计算出一个数字, 左边第一个比他小的数字的位置, 右边比第一个他小的数字的位置, 然后len = r[i] - l[i] +1. ans[len] = max(ans[len], a ...