我使用Reflexil程序将可执行文件Foo1.exe中的引用注入到名为Foo2.dll的外部程序集。
在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进行任何编译器检查时,我无法弄清楚如何正确地实现修复。
谢谢你的帮忙!
发布于 2012-06-05 19:23:53
在以下情况下,我得到了相同的错误消息: A.dll依赖于B.dll,B.dll依赖于C.dll,并且找不到C.dll。在我的示例中,A.dll包含一个类C2,该类派生自位于同一程序集和同一dll - A.dll中的抽象类C1。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添加到安装中。
https://stackoverflow.com/questions/6147891
复制相似问题