我正在尝试在CoreCLR应用程序中创建一个类的实例,但是当我调用Activator.CreateInstance时,我得到了System.MissingMethodException,说它无法在要创建的类上找到构造函数。该类确实具有构造函数。我究竟做错了什么?
该项目仅针对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
没有接受布尔值的重载,该参数指示是否可以使用非公共构造函数来实例化类型。
您的代码段正确构建是因为编译器选择了CreateInstance(Type type, params object[] args)
重载,该重载将布尔值视为构造函数参数:由于构造函数是无参数的,因此会引发异常。