Activator.CreateInstance MissingMethodException

200
16 июля 2021, 15:10

Столкнулся с весьма непонятной ситуацией. Активатор не видит подходящих конструкторов, хотя они есть в классе, и они отображаются при логировании. Проблема возникает на ПРОДЕ на КОНКРЕТНОМ сервере, я бы даже сказал в домене (Win 2008 r2). Установлен .NET 4.7.2. На других серверах и локально всё работает гладко. Код этот древний, работал много лет без проблем.

Добавил беспараметрический конструктор, но активатор не видит и его.

// загружаем библиотеку с необходимым типом
Assembly.LoadFile(file);
Type attrType = Type.GetType(typeName);
// пишем в логи информацию о конструкторах. В логи всё пишется, система видит конструкторы.
        foreach (var member in attrType.GetConstructors(BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase))
        {
            Logger.Debug($"Member'{member.Name}' of type '{member.MemberType}'");
            foreach (var p in member.GetParameters())
            {
                Logger.Debug($"Constructor '{member.Name}' parameter '{p.Name}' of type {p.ParameterType}");
            }
        }
// пошли создавать 
BaseClass result = null;
var logger = LoggerFactory.GetLogger();
result = (BaseClass)Activator.CreateInstance(attrType, logger); //MissingMethodException
result = (BaseClass)Activator.CreateInstance(attrType, new object[] { logger }); //MissingMethodException
result = (BaseClass)Activator.CreateInstance(attrType); //no parameterless constructor defined for this object

Класс в сборке

public class CurrentClass: BaseClass
{
    public CurrentClass()
        : base()
    {
    }
    public CurrentClass(ILogger logger)
        : base(logger)
    {
    }
}
public abstract class BaseClass
{
    protected readonly ILogger Logger;
    protected BaseOutGateway()
    {
    }       
    protected BaseOutGateway(ILogger logger)
    {
        this.Logger = logger;
    }
}

Вывод системы логирования

*[2019.09.09 21.21.49] Member '.ctor' type 'Constructor'

[2019.09.09 21.21.49] Constructor '.ctor' parameter 'logger' of type '...Logging.ILogger'

[2019.09.09 21.21.49] System.MissingMethodException: Constructor on type '...CurrentClass' not found.

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, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture) at ...GetCurrentClass() in d:\Projects...*

READ ALSO
Считать данные из *.xls в *.xml с помощью C#

Считать данные из *.xls в *.xml с помощью C#

Всем доброго времени суток! Нужна помощь, сам не успеваю, да и знаний нетНет, мне не нужен код и полностью написанная программа - хотелось бы узнать,...

224
Как правильно считывать бинарный файл

Как правильно считывать бинарный файл

У меня есть коллекция Book, в которой содержаться список книгЯ создаю бинарный файл и записываю в него эти данные

202
Отловить открытие папки в проводнике

Отловить открытие папки в проводнике

Можно как-то отловить открытие папки в проводнике на c# и передать путь в мою программу? Пытаюсь создать свой клон китайского clover'a

282