Activator.CreateInstance выдает "System.MissingMethodException" при использовании 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 ответ

Решение

На CoreCLR, Activator не имеет перегрузки, принимающей логический параметр, указывающий, могут ли непубличные конструкторы использоваться для создания экземпляра типа.

Ваш фрагмент собирается правильно, потому что компилятор выбирает CreateInstance(Type type, params object[] args) перегрузка, которая обрабатывает ваш логический параметр как параметр конструктора: поскольку ваш конструктор не содержит параметров, возникает исключение.

Другие вопросы по тегам