系统.typeloadeexception未处理:无法加载类型,因为该方法没有实现(没有RVA)

本文关键字:方法 实现 RVA 没有 因为 未处理 typeloadeexception 类型 加载 系统 | 更新日期: 2023-09-27 18:16:20

我试图通过输入字符串来执行命令。我有以下类:

abstract class ECommand {
    public static bool TryExecute(string raw, out object result) {
        string name = raw; //function trigger
        if (!Config.CommandRegister.ContainsKey(name)) {
            result = null;
            return false;
        }
        Type datType = Config.CommandRegister[name];
        var instance = Activator.CreateInstance(datType);
        MethodInfo method = datType.GetMethod("Execute");
        result = method.Invoke(instance, null);
        return true;
    }
    public extern object Execute();
}

字符串和等价类型在Dictionary中注册如下:

public static Dictionary<string, Type> CommandRegister = 
new Dictionary<string, Type> { {"test", typeof(TestECommand)} };     

我试着在这个类上测试它:

class TestECommand : ECommand {
    public new object Execute() {
        Console.WriteLine("test");
        return "k";
    }
}

调用

ECommand.TryExecute(source, out res);

我得到以下异常:

System.TypeLoadException was unhandled
  HResult=-2146233054
  Message=Could not load type 'Test.ECommand' from assembly 'Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because the method 'Execute' has no implementation (no RVA).
  Source=Test
  TypeName=Test.ECommand

我做错了什么?

系统.typeloadeexception未处理:无法加载类型,因为该方法没有实现(没有RVA)

我想你混淆了extern关键字-它通常用于p/invoke。

我想你指的是abstract

public abstract object Execute();