CLR找不到类型,即使它在同一个程序集中

时间:2011-12-02 20:10:49

标签: system.diagnostics tracelistener

我正在对我们的应用程序中的WCF问题进行故障排除,并使用VS 2010中的WCF服务配置编辑器启用了WCF跟踪,该编辑器将以下sharedListener添加到web.config:

    <sharedListeners>
      <add initializeData="D:\Logs\CRCCustomerService\Web_tracelog.svclog"
        type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
        <filter type="" />
      </add>
    </sharedListeners>

现在,当我采取措施重现我的错误时,我从System.Diagostics库中抛出异常,说它无法找到XmlWriterTraceListener:

Stack Trace: 
System.TypeInitializationException: The type initializer for       'System.ServiceModel.DiagnosticUtility' threw an exception. --->   System.Configuration.ConfigurationErrorsException: Couldn't find type for class System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. 
at System.Diagnostics.TraceUtils.GetRuntimeObject(String className, Type baseType,    String initializeData) 
at System.Diagnostics.TypedElement.BaseGetRuntimeObject() 
at System.Diagnostics.ListenerElement.GetRuntimeObject() 
at System.Diagnostics.ListenerElement.GetRuntimeObject() 
at System.Diagnostics.ListenerElementsCollection.GetRuntimeObject() 
at System.Diagnostics.TraceSource.Initialize() 
at System.Diagnostics.TraceSource.get_Listeners() 

它继续了几行,但这确定了背景。

我的问题是,因为根据ObjectBrowser和Reflector,XmlWriterTraceListener是System.Diagnostics所在的同一程序集的成员类,它怎么能找不到它?

其次,由于异常堆栈中的每一行都来自系统代码,我到底如何开始调试根本原因?

1 个答案:

答案 0 :(得分:1)

您使用的是.NET 4.0吗?

如果没有,您必须注意服务配置实用程序。它会将侦听器的版本硬编码为4.0,您需要手动更改web.config