繁体   English   中英

如何从 .NET 中的 app.config 中检索自定义部分?

[英]How to retrieve a custom section from an app.config in .NET?

我有一个 .NET Framework 4.7.2 库项目,里面有一个 App.config 文件,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <section name="NewDocumentMetadata" type="System.Configuration.NameValueSectionHandler" />
    </configSections>
    <NewDocumentMetadata>
        <add key="Type" value="principal"/>
        <add key="IsActive" value="true"/>
    </NewDocumentMetadata>
    <appSettings>
        <add key="Entity" value="9"/>
        <add key="Flux" value="pdf"/>
    </appSettings>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <!-- [...] -->
        </assemblyBinding>
    </runtime>
</configuration>

如您所见,我有一些标准设置,还有一个自定义部分。 我的设置没有问题,但是当我检索该部分时,它可以工作,但是我卡住了,当我尝试将其转换为NameValueCollectionAppSettingsSection时,它给了我一个null值,我被一个ConfigurationOption object 卡住了我无法合作。

        var appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);

        flux = appConfig.AppSettings.Settings["Flux"].Value; //Works
        entity = appConfig.AppSettings.Settings["Entity"].Value; //Works

        var metadataSection = appConfig.GetSection("NewDocumentMetadata"); //What do I do with this boy?

我需要检索NewDocumentMetadata部分中的设置,如何继续?

你应该试试这个:

var metadataSection = ConfigurationManager.GetSection("NewDocumentMetadata") as NameValueCollection;

// Get all the value foreach key
foreach(var key in metadataSection.AllKeys)
{
string value = metadataSection.GetValues(key).FirstOrDefault()
}

我刚刚发现问题出在这一行:

<section name="NewDocumentMetadata" type="System.Configuration.NameValueSectionHandler" />

我改变了类型并为此:

<section name="NewDocumentMetadata" type="System.Configuration.AppSettingsSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

现在我只需要执行这种代码来检索我想要的值:

var metadataSection = (AppSettingsSection)appConfig.GetSection("NewDocumentMetadata");

foreach (var key in metadataSection.Settings.AllKeys)
{
    string value = metadataSection.Settings[key].Value;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM