应用程序配置文件的名称问题

    在写C#的时候,有时候需要应用程序配置文件,即 "应用程序名.config",也可为“应用程序名.exe.config”,对于这两种名称,程序在运行时都能够正确读取,假如两者都存在,则优先读取“应用程序名.exe.config”。可以说,对于应用程序的运行,这两个命名没有区别,但是,在其他一些方面,这两个就有一些区别了。

情景一:

    调试时

    进行debug调试的时候,程序只读取“应用程序名.exe.config”这种配置文件,当你的调试目录下有"应用程序名.config"而没有“应用程序名.exe.config”的时候,你读取到的结果将是null,即使你的"应用程序名.config"文件中确实有你读取的那个段的名称。这种结果对于<appSettings>段或者你的自定义段(customSections)都是一样的,所以要注意。

如下图:

    可以看到,appsettingsTest.config里面是有Chinese这个段的,但是section0仍为null。此时只要重命名appsettingsTest.config为appsettingsTest.exe.config即可正常调试。

情景二:

    *.config配置文件的生成

    这种配置文件的生成有两种方法,

一是手动添加

    这样就会自动生成一个名为 App.config的文件在解决方案里面,不要重命名这个文件,然后在生成解决方案的时候,vs会自动复制一个内容一致,名字为“应用程序名.exe.config”的配置文件到程序目录。

另一种生成的方法是用代码生成:

            // Get the application configuration file.
            System.Configuration.Configuration config =
              ConfigurationManager.OpenExeConfiguration(
                    ConfigurationUserLevel.None);

            config.AppSettings.Settings.Add(key, value);

            // Save the configuration file.
            config.Save(ConfigurationSaveMode.Modified);

            // Force a reload of the changed section. This 
            // makes the new values available for reading.
            ConfigurationManager.RefreshSection(sectionName);

    用这种方法,假如开始不存在“应用程序名.exe.config”或者“应用程序名.config”,程序将会自动生成“应用程序名.config”,注意,不是“应用程序名.exe.config”。假如此时再进行debug,调试读取config,将会返回null。

    假如在调试的时候,程序目录下无“应用程序名.config”,也无“应用程序名.exe.config”,此时运行上面代码将出现什么名字的config呢,答案是“应用程序名.vshost.exe.config”,这个文件是临时的,一般会在调试结束之后被自动删除,而且这个名字也无法作为程序正常运行时的配置文件。

 

    所以当你遇到调试读取配置文件时,明明那个段有内容,但仍读到null时,可检查一下config文件的命名。

转载于:https://www.cnblogs.com/TrueElement/archive/2012/04/16/2451895.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值