2011-05-27 13 views
5

मैं प्रोग्राम रिफ्लेक्सिल का उपयोग निष्पादन योग्य Foo1.exe में Foo2.dll नामक बाहरी असेंबली में संदर्भित करने के लिए कर रहा हूं।System.TypeLoadException - विधि *** *** को विधानसभा से *** *** में मिलता है *** जब ऐसा होता है तो कार्यान्वयन नहीं होता है?

Foo1.exe में, बार नामक एक कक्षा है।

Foo2.dll में, एक इंटरफ़ेस आईबीआर है जो बार के सभी क्षेत्रों और विधियों को सही ढंग से लागू करता है।

मैंने Foo2.dll में इंटरफ़ेस आईबीआर Foo1.exe में बार देने के लिए रिफ्लेक्सिल का उपयोग किया है।

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 पर निर्भर नहीं है। मेरे मामले में ए.एल.एल. में एक ही विधानसभा में स्थित एक ही डीएल - एडीएल में स्थित सार वर्ग सी 1 से व्युत्पन्न कक्षा सी 2 शामिल है। सी 1 बी डीएल से सी 0 कक्षा से लिया गया है। सी 0 में अमूर्त गेटर विधि के साथ सार संपत्ति है, सी 1 में इस संपत्ति का कार्यान्वयन है लेकिन मामला यह है कि संपत्ति के गेटर का रिटर्न प्रकार अनुपस्थित पुस्तकालय सीडीएल में परिभाषित किया गया है। फिनली, यह असेंबली 'ए, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = xxxx' के कार्यान्वयन में "विधि 'get_Prop' प्रकार 'सी 2' में त्रुटि संदेश की ओर जाता है।" जो इस स्थिति में अप्रासंगिक है। कम स्रोत कोड में इस तरह दिखता है:

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 जोड़ने के लिए है।

संबंधित मुद्दे

 संबंधित मुद्दे