【问题标题】:Activator.CreateInstance throws 'System.MissingMethodException' when using CoreCLRActivator.CreateInstance 在使用 CoreCLR 时抛出“System.MissingMethodException”
【发布时间】:2015-11-18 21:16:43
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    您的 sn-p 可以正确构建,因为编译器选择了 CreateInstance(Type type, params object[] args) 重载,它将您的布尔值视为构造函数参数:由于您的构造函数是无参数的,因此会引发异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多