【问题标题】:How to get a top level configuration (type is System.Configuration.Configuration) from ConfigurationManager?如何从 ConfigurationManager 获取顶级配置(类型为 System.Configuration.Configuration)?
【发布时间】:2015-08-26 16:40:36
【问题描述】:

我试过了:

((ConfigurationSection)ConfigurationManager.GetSection("appSettings"))).CurrentConfiguration

但是得到了System.InvalidCastException

我确实想使用ConfigurationManager.OpenMappedExeConfiguration,因为它需要配置文件的路径,这在我们的情况下有所不同。

谢谢。

【问题讨论】:

    标签: c# configurationmanager


    【解决方案1】:

    1) Appsettings 部分是 NameValueCollection 的类型,而不是 ConfigurationSection,因此它的 InavalidCastException。为避免上述代码出现异常

    ((NameValueCollection)ConfigurationManager.GetSection("appSettings"))
    

    2) 除了AppSettingsConnectionStrings 之外,配置文件的任何其他部分都可以读取如下

    var section = ConfigurationManager.GetSection("startup") as ConfigurationSection;
    

    3) 如果配置文件的路径不同,则使用汇编代码库获取路径很有帮助,如下所示

    var path = Assembly.GetExecutingAssembly().CodeBase;
    var path1 = Assembly.GetEntryAssembly().CodeBase;
    

    【讨论】:

    • 谢谢萨蒂。但是2号不起作用。 var section = ConfigurationManager.GetSection("startup") as ConfigurationSection; //section is {System.Configuration.IgnoreSection} var topLevel = section.CurrentConfiguration; //topLevel is still null 我的配置文件
    • 使用 OpenMappedExeConfiguration 得到一个 System.Configuration.Configuration。 var path = Assembly.GetExecutingAssembly().Location + ".config";var topLevel = ConfigurationManager.OpenExeConfiguration(path); //topLevel not null
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多