2012-07-20 76 views
6

我有一個很奇怪的問題。我在DLL中定義的接口如下:我得到「非抽象的,非接口的.cctor-方法」的原因是什麼?

public interface IKreator2 
{ 
    string Name { get; set; } 
    string Description { get; set; } 

    INotifyPropertyChanged Settings { get; set; } 

    InfiniRenderJob Job { get; set; } 
    UserControl UI { get; set; } 

    void Init(); 
    //void OnClose(); 
} 

如果我鏈接的DLL在我的WPF應用程序上負載調試器崩潰(內部錯誤:未處理的異常在調試器:: HandleIPCEvent,ID = 0x246) 。如果我與調試「調試非託管代碼」的應用程序,我得到了以下錯誤:

  • 第一次機會異常在0x76977945(KernelBase.dll)在 InfiniRender.Host.exe:微軟C++異常:在內存EETypeLoadException 位置0x0029c5b8。
  • 0x76977945(KernelBase.dll)中的第一次機會異常 InfiniRender.Host.exe:Microsoft C++異常:[rethrow]在內存 位置0x00000000。
  • YPE 'System.TypeLoadException' 的第一次機會異常發生 在InfiniRender.Host.exe
  • 類型 'System.TypeLoadException' 的未處理的異常發生在 InfiniRender.Host.exe其他信息:Nicht abstrakte Nicht -ector-Methode in einer Schnittstelle。

在這一刻我絕對沒有線索發生了什麼事情。甚至沒有接口的實現,沒有類使用它。如果我將方法「Init」評論出來,一切都按預期工作。 任何想法??

[編輯] 這是MSIL的接口init方法:

.method public hidebysig newslot virtual 
     instance void Init() cil managed 
{ 
// Code size  96 (0x60) 
.maxstack 3 
.locals init ([0] class [mscorlib]System.Exception CS$0$0__ex) 
IL_0000: ldsfld  class [NLog]NLog.Logger '<>z__LoggingImplementationDetails'::l14 
IL_0005: callvirt instance bool [NLog]NLog.Logger::get_IsTraceEnabled() 
IL_000a: brfalse.s IL_001b 

IL_000c: ldsfld  class [NLog]NLog.Logger '<>z__LoggingImplementationDetails'::l14 
IL_0011: ldstr  "Entering: InfiniRender.IKreator2.Init()" 
IL_0016: call  instance void [NLog]NLog.Logger::Trace(string) 
.try 
{ 
    IL_001b: newobj  instance void [mscorlib]System.NotSupportedException::.ctor() 
    IL_0020: throw 

    IL_0021: ldsfld  class [NLog]NLog.Logger '<>z__LoggingImplementationDetails'::l14 
    IL_0026: callvirt instance bool [NLog]NLog.Logger::get_IsTraceEnabled() 
    IL_002b: brfalse.s IL_003c 

    IL_002d: ldsfld  class [NLog]NLog.Logger '<>z__LoggingImplementationDetails'::l14 
    IL_0032: ldstr  "Leaving: InfiniRender.IKreator2.Init()" 
    IL_0037: call  instance void [NLog]NLog.Logger::Trace(string) 
    IL_003c: leave.s IL_005f 

} // end .try 
catch [mscorlib]System.Exception 
{ 
    IL_003e: ldsfld  class [NLog]NLog.Logger '<>z__LoggingImplementationDetails'::l14 
    IL_0043: callvirt instance bool [NLog]NLog.Logger::get_IsWarnEnabled() 
    IL_0048: brfalse.s IL_005d 

    IL_004a: stloc.0 
    IL_004b: ldsfld  class [NLog]NLog.Logger '<>z__LoggingImplementationDetails'::l14 
    IL_0050: ldstr  "An exception occurred:\n{0}" 
    IL_0055: ldloc.0 
    IL_0056: call  instance void [NLog]NLog.Logger::Warn(string, 
                  object) 
    IL_005b: rethrow 
    IL_005d: leave.s IL_005f 

} // end handler 
IL_005f: ret 
} // end of method IKreator2::Init 

在我看來,那是NLOG怪誰呢?直到今天從來沒有任何問題與NLog ...

+0

該接口的原始IL表示什麼? – thecoop 2012-07-20 11:59:46

+0

可以在某處上傳repro嗎? – Simon 2012-07-20 12:15:07

+0

你如何消耗這個接口?你的錯誤意味着一些非託管代碼。而且,'TypeLoadException'實例很可能不是由* interface *引起的,而是由* implements實現的接口。 – casperOne 2012-07-20 13:16:09

回答

2

因此,這裏的罪魁禍首是「Postsharp.Diagnostics.Toolkit」,它添加代碼接口方法聲明導致調試器混亂。

感謝所有幫助!

+0

我有同樣的錯誤。感謝您的回答。我已將我的建議發佈到http://support.sharpcrafters.com/discussions/suggestions/5-default-psproj-in-toolkit-should-exclude-interfaces – 2012-08-09 12:24:16

相關問題