通过合并两个配置文件来创建 System.Configuration.Configuration?

Posted

技术标签:

【中文标题】通过合并两个配置文件来创建 System.Configuration.Configuration?【英文标题】:Creating a System.Configuration.Configuration by merging two config files? 【发布时间】:2011-09-24 13:15:36 【问题描述】:

我有两个 .config 文件,我需要一个 System.Configuration.Configuration,它是它们之间的部分合并?

我可以将文件读取为 XML 并轻松创建所需的合并,但它是一个字符串或 XDocument。但是,.net 的 System.Configuration 似乎是严格基于文件的,所以我必须将它写入我想避免的临时目录。

有没有办法做到这一点?

例如,config1.config:

<configuration>
    <appSettings>
        <add key="CacheTime" value="300" />
    </appSettings>
    <system.serviceModel>
        <behaviors>
          <endpointBehaviors>
            <behavior name="MyBehavior">
               <!-- snipped -->
            </behavior>
          </endpointBehaviors>
        </behaviors>
    </system.serviceModel>
</configuration>

config2.config:

<configuration>
    <system.serviceModel>
     <client>
          <endpoint name="MyEndpoint" address="net.tcp://...."
            behaviorConfiguration="MyBehavior" binding="netTcpBinding"
            contract="IMyContract">
          </endpoint>
     </client>
    </system.serviceModel>
</configuration>

生成的配置应该是这两者的联合,这样我就有了 AppSetting 和 Endpoint。现在,这个示例包含 WCF,但我不是在寻找 WCF 特定的解决方案,因为我绝对需要一个 System.Configuration.Configuration 对象。

config1 和 config2 只是示例 - 它们的实际组合是不确定的,我可能有 config1 和 config4 或 config 3 和 config4 或 config2 和 config3。

【问题讨论】:

嗨迈克尔。配置文件不相交?你能发布一个两者的小例子,以及你期望的结果吗?我很乐意为您提供帮助。 【参考方案1】:

如果您的目标只是让您的配置文件更加模块化(并可能保护对特定部分的文件访问),请查看System.Configuration.SectionInformation.ConfigSource。

【讨论】:

configSource 遗憾地只接受一个覆盖。在这种情况下,它不会有任何好处,因为实际的配置组合是不确定的。将澄清问题。 明白了。在那种情况下,我想不出任何办法,除了弄乱 XmlDocument 并编写一个临时文件来加载,正如你所提到的。不过好奇地看着这个;你永远不知道。

以上是关于通过合并两个配置文件来创建 System.Configuration.Configuration?的主要内容,如果未能解决你的问题,请参考以下文章

通过合并两个 VBS 代码创建多个文件夹

php 二维数组中取某个唯一的键值为键名。(通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组的元素为键值。)

如何将两个List合并,且其中不允许出现重复的项

使用deepMerge库深度合并两个对象可枚举属性

Git设定不合并的文件

git设定不合并的文件