如何在多个文件中分割配置部分

时间:2019-04-02 11:20:23

标签: c# asp.net

我有一个实用程序应用程序,允许用户从各种数据库导入/导出数据。通过在app.config中添加一个自定义配置部分来添加每个新任务,如下所示。随着时间的流逝,app.config文件变得非常大,并且为了使事情变得简单,我希望用户能够在单独的文件中添加新任务。我已经阅读了一些选项,其中可以通过指定appSettings属性将connectionStringconfigSource设置移动到其他配置文件。可以对自定义部分执行相同的操作吗?

我在内部用于任务配置的自定义部分示例。

  <configSections>
    <sectionGroup name="tasks">
      <sectionGroup name="ImportData">
        <section name="transferType" type="System.Configuration.NameValueSectionHandler"/>
        <section name="srcConnectionString" type="System.Configuration.NameValueSectionHandler"/>
        <section name="srcProcedure" type="System.Configuration.NameValueSectionHandler"/>
        <section name="destConnectionString" type="System.Configuration.NameValueSectionHandler"/>
        <section name="destTable" type="System.Configuration.NameValueSectionHandler"/>
      </sectionGroup>
    </sectionGroup>
  </configSections>
  <tasks>
    <ImportData>
      <transferType>
        <add key="transferType" value="database" />
      </transferType>
      <srcConnectionString>
        <add key="srcConnectionString" value="sourceDB" />
      </srcConnectionString>
      <srcProcedure>
        <add key="srcProcedure" value="sourceProcedureName" />
      </srcProcedure>
      <destConnectionString>
        <add key="destConnectionString" value="destConnection" />
      </destConnectionString>
      <destTable>
        <add key="destTable" value="TableName" />
      </destTable>
    </ImportData>
  </tasks>

部分值的读取方式类似

NameValueCollection transferSection = (NameValueCollection)ConfigurationManager.GetSection("ImportData/transferType");

如何在单独的文件中添加新部分,并且仍然能够以相同的方式阅读。

1 个答案:

答案 0 :(得分:1)

根据.NET的documentation,这是不可行的。

一种替代方法是重组您的web.config:

<configSections>
    <sectionGroup name="tasks">
        <section name="import" />
        <section name="export" />
    </sectionGroup>
</configSections>
<tasks>
    <import configSource="import.config" />
    <export configSource="export.config" />
</tasks>

然后您可以在这些外部文件中添加自定义导入/导出任务。