c# - 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 引用的。
解决方案
首先,您完全确定types
仅包含PackageForm
?
无论如何,PackageForm
当它只有一个默认构造函数(无参数)时,您尝试使用构造函数参数进行创建
你可能只想调用这个
resp = (Form)Activator.CreateInstance(types[0]);
推荐阅读
- reactjs - 为什么 React 组件只有在我刷新页面后才能工作?
- redirect - TCL/TK - 如何从包中捕获标准错误输出?
- c - 为什么下面的方法1不能实现排序功能,而方法2可以呢?
- php - 是否可以使用 PHP 显示 htp 输出?
- sql - bigQuery 抛出“除以零:0 / 0”错误
- node.js - 重复一个函数并在完成后等待 x 秒
- c# - 在 C# 控制台或 Windows 窗体中从 byte[] 播放 MP4
- excel - 如何基于同一行中的另一个单元格突出显示列中单元格值的所有实例?
- selenium - 带有随机端口“操作已超时”的 Chromedriver localhost
- memory-leaks - jemalloc / jeprof 显示地址而不是基于 lg_prof_interval 的函数名称