【顽症】客户端调用DLL类库项目时,config文件中自定义Section的顺序

来源:互联网 发布:mysql 指定账户已存在 编辑:程序博客网 时间:2024/06/02 17:25

      工作中,需要开发一个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>节点的开始位置。

 

      原因在什么地方我不清楚,我想这个问题的原因对于我来说并不是最重要的,但至少花了很大功夫的问题终于解决了!