【问题标题】:Extend an element in App.config在 App.config 中扩展一个元素
【发布时间】:2017-04-06 00:03:59
【问题描述】:

我们有一个 app.config 与 Carbonator 一起使用:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="carbonator" type="Crypton.Carbonator.Config.CarbonatorSection, Crypton.Carbonator"/>
  </configSections>

  <carbonator defaultCulture="en-US" logLevel="1" collectionInterval="1000" reportingInterval="1000" >
    <statsd server="127.0.0.1" port="8125" />
    <counters>
      <add path="processor_information.pct_processor_time.total" category="Processor" counter="% Processor Time" instance="_Total" />
      <add path="memory.available_MBytes" category="Memory" counter="Available MBytes" instance="" />
      <add path="memory.pct_commited_bytes_in_use" category="Memory" counter="% Committed Bytes In Use" instance="" />
    </counters>
  </carbonator>
</configuration>

我们希望允许用户在我们从 &lt;counters&gt; 元素引用的外部配置文件中配置自己的自定义计数器。例如,我们想让用户配置文件看起来像:

<add path="logical_disk.pct_free_space.C" category="LogicalDisk" counter="% Free Space" instance="C:" />
<add path="logical_disk.disk_read_bytes_per_sec.C" category="LogicalDisk" counter="Disk Read Bytes/sec" instance="C:" />
<add path="logical_disk.disk_write_bytes_per_sec.C" category="LogicalDisk" counter="Disk Write Bytes/sec" instance="C:" />

我什至不知道这是否可以在 appConfig 元素之外实现,但我们不胜感激。

【问题讨论】:

    标签: c# .net configuration app-config


    【解决方案1】:

    根据this answer 应该是可以的。 this article 中也描述了相同的方式。

    但我认为这不是一个好主意,原因之一是 - 如果用户在他的配置扩展中犯了错误,它将阻止应用程序执行,因为应用程序配置变得无效。

    我宁愿使用app.config 文件中的配置来提供默认值并自己实现一些用户配置。在这种情况下,您可以使用任何您喜欢的配置格式,例如JSON,这对用户来说也会更好(更容易创建和编辑)。在您的应用程序中,您只需合并两个配置(app.config 值是默认值,将被用户的配置覆盖)。

    【讨论】:

    • 感谢您的回答。我们仍在研究最佳方法,但我会记住您的建议。
    • 不客气。我肯定会为用户配置实现自定义配置,因为您可以控制一切。您可以向用户呈现更好的错误消息(实际上是有意义的消息,因为有关格式错误的app.config 的默认错误消息可能会让用户非常困惑)。
    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多