Столкнулся с весьма непонятной ситуацией. Активатор не видит подходящих конструкторов, хотя они есть в классе, и они отображаются при логировании. Проблема возникает на ПРОДЕ на КОНКРЕТНОМ сервере, я бы даже сказал в домене (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...*
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Всем доброго времени суток! Нужна помощь, сам не успеваю, да и знаний нетНет, мне не нужен код и полностью написанная программа - хотелось бы узнать,...
У меня есть коллекция Book, в которой содержаться список книгЯ создаю бинарный файл и записываю в него эти данные
Можно как-то отловить открытие папки в проводнике на c# и передать путь в мою программу? Пытаюсь создать свой клон китайского clover'a