2011-05-27 152 views
5

我正在使用程序Reflexil將可執行程序Foo1.exe中的引用注入名爲Foo2.dll的外部程序集。System.TypeLoadException - 從程序集***中獲取類型爲***的方法get _ ***在執行時沒有實現?

在Foo1.exe中,有一個名爲Bar的類。

在Foo2.dll中,有一個接口IBar,它正確地實現了Bar的所有字段和方法。

我已經使用Reflexil爲Foo1.exe中的Bar提供Foo2.dll中的IBar接口。

當Foo1.exe負載,發現Foo2.dll位於應用程序目錄,並加載它,但它拋出與以下錯誤消息Method 'get_***' in type 'Foo1.Bar' from assembly 'Foo1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.

我已經通過與前一個問題讀取System.TypeLoadException同樣的錯誤消息(TypeLoadException says 'no implementation', but it is implemented),但我一直無法弄清楚如何正確實施修復程序,當我沒有任何Foo1.exe的編譯器檢查。

感謝您的幫助!

回答

4

我在以下情況下得到了相同的錯誤消息:A.dll依賴於B.dll,B.dll依賴於C.dll而C.dll未找到。 在我的情況下,A.dll包含一個C2類派生自抽象類C1位於相同的程序集和相同的DLL - A.dll。 C1來自B.dll的C0類。 C0具有抽象屬性和抽象的getter方法,C1具有該屬性的實現,但問題是該屬性的getter的返回類型在缺少的庫C.dll中定義。 最後,它會導致從程序集'A,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = xxxx'類型'C2'中的方法'get_Prop'沒有實現。「 這在這種情況下是無關緊要的。 總之源代碼看起來是這樣的:

C.dll:

namespace C { 
    public enum PropType {V1 = 0, V2 = 1, ...} 
} 

B.DLL:

using C; 
namespace B { 
    public abstract class C0 { 
    ... 
    public abstract C.PropType Prop {get;} 
    } 
} 

A.DLL:

using C; 
using B; 
namespace A { 
    public abstract class C1 : B.C0 { 
    ... 
    // Getter implementation 
    public override C.PropType Prop { get {return C.PropType.V1;}} 
    } 
} 

using C; 
using B; 
namespace A { 
    // Class implementation 
    public class C2 : C1 { 
    ... 
    } 
} 

所以解決方法是將C.dll添加到安裝中。

相關問題