我正在使用Reflexil程序将可执行文件Foo1.exe中的引用注入到名为Foo2.dll的外部程序集中。
在Foo1.exe中,有一个名为Bar的类。
在Foo2.dll中,有一个接口IBar,可正确实现Bar的所有字段和方法。
我已经使用Reflexil为Foo1.exe中的Bar提供了Foo2.dll中的IBar接口。
当加载Foo1.exe时,它会找到位于应用程序目录中的Foo2.dll并加载它,但它会抛出System.TypeLoadException,并显示以下错误消息Method 'get_***' in type 'Foo1.Bar' from assembly 'Foo1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.
我已经使用相同的错误消息(TypeLoadException says 'no implementation', but it is implemented)阅读了上一个问题,但是当我没有对Foo1进行任何编译器检查时,我一直无法弄清楚如何正确实现修复.EXE。
感谢您的帮助!
答案 0 :(得分:4)
我在以下情况下得到了相同的错误消息:A.dll依赖于B.dll,B.dll依赖于C.dll而未找到C.dll。 在我的例子中,A.dll包含一个派生自抽象类C1的C2,它位于同一个程序集和同一个dll-A.dll中。 C1来自B.dll的C0类。 C0具有抽象属性和抽象getter方法,C1具有此属性的实现,但问题是属性的getter的返回类型是在缺少的库C.dll中定义的。 最后,它会导致程序集'A,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = xxxx'的类型'C2'中的错误消息“Method'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添加到安装中。