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) 重载,它将您的布尔值视为构造函数参数:由于您的构造函数是无参数的,因此会引发异常。