Activator.CreateInstance 使用 CoreCLR 时抛出 'System.MissingMethodException'
Activator.CreateInstance throws 'System.MissingMethodException' when using CoreCLR
我试图在我的 CoreCLR 应用程序中创建一个 class 的实例,但是当我调用 Activator.CreateInstance 时,我得到一个 System.MissingMethodException 说它找不到它正在尝试创建的 class 上的构造函数。 class 确实有一个构造函数。我做错了什么?
该项目仅针对 dnxcore50。
这是代码:
using System;
namespace MyNamespace
{
public class Program
{
public void Main(string[] args)
{
Activator.CreateInstance(typeof (MyClass), true);
}
}
public class MyClass
{
public MyClass() { }
}
}
这是个例外:
System.MissingMethodException was unhandled by user code
HResult=-2146233069
Message=Constructor on type 'MyNamespace.MyClass' not found.
Source=mscorlib
StackTrace:
at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
at System.Activator.CreateInstance(Type type, Object[] args)
at MyNamespace.Program.Main(String[] args) in C:\projects\coreclrplayground\InvokeMember\src\InvokeMember\Program.cs:line 9
InnerException:
在 CoreCLR 上,Activator
没有接受布尔参数的重载,指示非 public 构造函数是否可用于实例化类型。
您的代码片段构建正确,因为编译器选择了 CreateInstance(Type type, params object[] args)
重载,它将您的布尔值视为构造函数参数:由于您的构造函数是无参数的,因此会引发异常。
我试图在我的 CoreCLR 应用程序中创建一个 class 的实例,但是当我调用 Activator.CreateInstance 时,我得到一个 System.MissingMethodException 说它找不到它正在尝试创建的 class 上的构造函数。 class 确实有一个构造函数。我做错了什么?
该项目仅针对 dnxcore50。
这是代码:
using System;
namespace MyNamespace
{
public class Program
{
public void Main(string[] args)
{
Activator.CreateInstance(typeof (MyClass), true);
}
}
public class MyClass
{
public MyClass() { }
}
}
这是个例外:
System.MissingMethodException was unhandled by user code
HResult=-2146233069
Message=Constructor on type 'MyNamespace.MyClass' not found.
Source=mscorlib
StackTrace:
at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
at System.Activator.CreateInstance(Type type, Object[] args)
at MyNamespace.Program.Main(String[] args) in C:\projects\coreclrplayground\InvokeMember\src\InvokeMember\Program.cs:line 9
InnerException:
在 CoreCLR 上,Activator
没有接受布尔参数的重载,指示非 public 构造函数是否可用于实例化类型。
您的代码片段构建正确,因为编译器选择了 CreateInstance(Type type, params object[] args)
重载,它将您的布尔值视为构造函数参数:由于您的构造函数是无参数的,因此会引发异常。