首页 > 解决方案 > Activator.CreateInstance 期间的 MissingMethodException

问题描述

我有一个带有这个构造函数的 Form 类:

public partial class PackageForm : Form
{
    Responder MfwuResp;

    public PackageForm()
    {
        MfwuResp = new Responder(new Responder.CancelHandler(StopMethod), true);
    }

    public void StopMethod(Responder responder)
    {
        Console.WriteLine("Cancel Update");
    }
}

我在一个单独的文件中也有一个 Responder 类

public class Responder 
{
    Type[] types;
    Object resp;

    public Responder(Responder.CancelHandler handler, bool isCancellable)
    {
        BinaryReader reader = new BinaryReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("Update.Resources.AppUpdate.dll"));

        byte[] bytes = reader.ReadBytes((int)reader.BaseStream.Length);

        Assembly assm = Assembly.Load(bytes);

        types = assm.GetExportedTypes();

        resp = Activator.CreateInstance(types[0], new object[] { handler, isCancellable });

    }

    public delegate void CancelHandler(UtilityResponder responder);
}

每当我在 Main 中创建一个新的 PackageForm 时,我都会得到MissingMethodException

找不到类型“AppUpdate.Responder”的构造函数。

知道为什么会这样吗?我想语法没有问题,因为 CreateInstance 有一个构造函数,它将 Type 和 params object[] 作为参数。

注意:Responder 类是从外部 dll 文件 AppUpdate.dll 引用的。

标签: c#.netactivatormissingmethodexception

解决方案


首先,您完全确定types仅包含PackageForm

无论如何,PackageForm当它只有一个默认构造函数(无参数)时,您尝试使用构造函数参数进行创建

你可能只想调用这个

resp = (Form)Activator.CreateInstance(types[0]);

推荐阅读