System.TypeLoadException-程序集***中类型***中的方法get_***没有实现,但它没有实现

本文关键字:实现 方法 程序集 TypeLoadException- 类型 System get | 更新日期: 2023-09-27 17:57:43

我正在使用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说"没有实现",但它已经实现),但当我没有对Foo1.exe进行任何编译器检查时,我无法弄清楚如何正确实现修复。

谢谢你的帮助!

System.TypeLoadException-程序集***中类型***中的方法get_***没有实现,但它没有实现

在以下情况下,我收到了相同的错误消息:A.dll依赖于B.dll,B.dll依赖于C.dll,并且找不到C.dll。在我的例子中,A.dll包含一个类C2,该类派生自位于同一程序集和同一dll中的抽象类C1。A.dll中的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添加到安装中。