使用CoreCLR时,Activator.CreateInstance会抛出'System.MissingMethodException'

时间:2015-11-18 21:16:43

标签: c# reflection asp.net-core dnx coreclr

我正在尝试在我的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:

1 个答案:

答案 0 :(得分:3)

在CoreCLR上,Activator没有接受布尔参数的重载,该布尔参数指示是否可以使用非公共构造函数来实例化该类型。

您的代码段构建正确,因为编译器选择CreateInstance(Type type, params object[] args)重载,它将您的布尔值视为构造函数参数:因为您的构造函数是无参数的,所以抛出异常。