System.TypeLoadException - 从程序集***中***类型的方法获取_ ***没有实现的时候?

时间:2011-05-27 04:37:55

标签: c# reference inject typeloadexception

我正在使用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。

感谢您的帮助!

1 个答案:

答案 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添加到安装中。