工作中,需要开发一个DLL类库项目交给客户,一些环境配置需要写在config文件里。
如果是一个可执行的WinForm或者控制台项目,则只需要用ConfigurationManager类来操作就可以了,很方便;但换成成客户端调用DLL类库项目的结构,则要用另外的手段。
在.NET 2.0以后,要引入System.Configuratoin.dll(在.NET 1.0中,直接使用ConfigurationSettings类就可以了),这样才能使用ConfigurationManager类的接口。
1.新建一个ExeConfigurationFileMap实例;
2.设置其ExeConfigFilename属性为我们的配置文件所在路径(在项目中新建App.config文件后,如果是WinForm或者控制项目,编译后则会在debug及release目录中自动生成<项目名>.exe.config文件;如果是DLL类库项目,扩展名就会变成.dll.config);
3.使用ConfigurationManager.OpenMappedExeConfiguration方法来生成Configuration类型的实例,这样,Configuration类的AppSettings.Settings就可以像WinForm或者控制台项目中ConfigurationManager类的AppSettings集合同样的方式来使用了。
到此为止,已经打好了取配置文件中各种配置的基础了。但在配置文件中该怎么写呢?
一般情况下,我们会在配置文件的开始(也就是<configuration>)的地方首先写数据库的连接字符串等配置<connectionStrings>,在这之后我们再定义<configSections>及<sectionGroup>节点等,最后在C#代码中,通过config.SectionGroups[xxxxxx]得到一个ConfigurationSectionGroup的集合,就可以取出自定义Section中的值了。
但我最初这样写,根本无法得到自定义的这个Section,这是为什么呢?以为是自己程序哪里写错了,费了不少时间去找错,但找不出错;是不是遗漏了某些设置步骤,但仍然没问题。绞尽脑汁,在网上查来查去,最后终于找出解决方法了(当时找到这个解决点时我还只是抱着试试的态度,没当回事):
必须要把自定义的Section(<configSections>)写在<configuration>节点的开始位置。
原因在什么地方我不清楚,我想这个问题的原因对于我来说并不是最重要的,但至少花了很大功夫的问题终于解决了!