2011-05-27 22 views
5

Foo2.dll adlı bir dış derleme için yürütülebilir bir Foo1.exe dosyasında bir başvuru enjekte etmek için Reflexil programını kullanıyorum.System.TypeLoadException - Yöntem *** 'den *** türüne *** getirilsin mi?

Foo1.exe dosyasında Bar adı verilen bir sınıf var.

Foo2.dll dosyasında, Bar'ın tüm alanlarını ve yöntemlerini doğru bir şekilde uygulayan bir arabirim IBarı vardır.

Foo1.dll aracında IBar içerisindeki Bar'a Bar vermek için Reflexil kullandım.

Foo1.exe yükler, bu uygulama dizinine ve yükler bunu bulunan Foo2.dll bulur, ama Method 'get_***' in type 'Foo1.Bar' from assembly 'Foo1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.

Zaten önceki soruya yoluyla okudum aşağıdaki hata iletisiyle System.TypeLoadException atar aynı hata iletisi (TypeLoadException says 'no implementation', but it is implemented), ancak herhangi bir derleyici Foo1.exe için denetimleri olmadığında düzeltmeyi doğru olarak nasıl gerçekleştireceğimi anlayamadım.

Yardımlarınız için teşekkürler!

cevap

4

Aşağıdaki durumda aynı hata iletisini aldım: A.dll, B.dll dosyasına bağımlıdır, B.dll, C.dll dosyasına bağımlıdır ve C.dll bulunamadı. Benim durumumda A.dll, aynı derleme ve aynı dll - A.dll bulunan C1 sınıfından türetilmiş bir sınıf C2 içerir. C1, B.dll'den C0 sınıfından türetilmiştir. C0 soyut getter yöntemi ile soyut bir mülkü vardır, C1 bu özelliğin bir uygulamasına sahiptir, ancak konu, mülkün getterinin geri dönüş türünün, kütüphane C.dll dosyasında tanımlanmış olmasıdır. Sonuç olarak, "C2" türündeki "Yöntem" get_Prop "hata iletisine yol açar. 'A, Sürüm = 1.0.0.0, Culture = neutral, PublicKeyToken = xxxx' bir uygulamaya sahip değil." Bu durumda oldukça alakasız olan . Kısacası Kaynak kodunda şuna benzer:

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 { 
    ... 
    } 
} 

Çözüm, C.dll dosyasını yüklemeye eklemektir.

İlgili konular