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)
перегрузка, которая обрабатывает ваш логический параметр как параметр конструктора: поскольку ваш конструктор не содержит параметров, возникает исключение.