如何在app.config文件中配置基类库?

时间:2009-04-14 20:20:37

标签: c# web-config app-config

我发现了一些与app.config / web.config相关的信息片段,它直接通过app.config提示几乎无代码的BCL组件配置。但是,考虑到app.config中intellisense建议的标签数量,它表明存在大量的可能性,我无法找到任何有用的信息。

是否有任何文档支持配置文件的这个特定区域?我可以找到关于存储/检索配置信息的大量信息,以及关于编写我熟悉的自定义配置部分的少量信息,但是我找不到有关以这种方式配置BCL组件的任何信息。有没有人有这方面的参考资料?

我遇到的一个例子如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true" indentsize="2">
      <listeners>
        <add name="Console"
             type="System.Diagnostics.ConsoleTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
              traceOutputOptions="Timestamp" />
      </listeners>
    </trace>
    <switches>
      <add name="Logging.Program.Listener" value="Error" />
    </switches>
  </system.diagnostics>
</configuration>

可以使用与此类似的方式使用代码来消费:

class Program
{
  private static TextWriterTraceListener tw = new TextWriterTraceListener();
  private static TraceSwitch ts = new TraceSwitch("Logging.Program.Listener", "Default Logging Level", "Off");

  static void Main(string[] args)
  {
    Trace.Listeners.Add(tw);

    try
    {
        throw (new EntryPointNotFoundException());
    }
    catch (EntryPointNotFoundException ex)
    {
        string TraceMessage = "Trace {0}: {1}";
        Trace.WriteLineIf(ts.TraceError, String.Format(TraceMessage, TraceLevel.Error, "Error Level Message"));
        Trace.WriteLineIf(ts.TraceWarning, String.Format(TraceMessage, TraceLevel.Warning, "Warning Level Message"));
        Trace.WriteLineIf(ts.TraceInfo, String.Format(TraceMessage, TraceLevel.Info, "Info Level Message"));
        Trace.WriteLineIf(ts.TraceVerbose, String.Format(TraceMessage, TraceLevel.Verbose, "Verbose Level Message"));
    }
  }
}

2 个答案:

答案 0 :(得分:2)

一个有用的资源是机器级配置文件。实际的文件很简单,但是它们旁边还有“.comments”文件,它们提供了可以实现的相当详细的示例。例如,看看

  

C:\的Windows \ Microsoft.NET \框架\ V2.0.50727 \ CONFIG \ machine.config.comments

这会让你知道什么是可以实现的。在您看到集合元素的任何位置,如<traceSwitches><traceListeners>元素的情况,其中包含的各个<add>元素可能会根据您添加的内容(即特定属性)而有所不同这些<add>元素将根据您添加到集合中的具体内容而有所不同。为此,您需要查阅特定的文档区域,但在MSDN中搜索<traceSwitches>元素应该是一个不错的起点。

答案 1 :(得分:0)

他们都可以通过这种方式配置。这就是你找不到任何东西的原因。

好吧,也许不是全部,但肯定是最重要的。如果您想知道,请使用Reflector查找System.configuration.ConfigurationSection等的所有派生类。