В прошлом, я написал приложение, которое динамически загружает DLL и все его зависимости, основанные на значения в базе данных, как показано ниже (продезинфицировать некоторые параметры)Динамическая загрузка Ассамблеи
VB
Dim oType As System.Type
Dim oAssembly As System.Reflection.Assembly
Dim oObject As System.Object
oAssembly = Assembly.LoadFrom(path)
oType = oAssembly.GetType("LogicValidator")
oObject = Activator.CreateInstance(oType)
oObject.Initialise("param1", "param2", "param3", AuditTrail, UserInfo, workingDir)
Console.WriteLine("Begin processing...")
oObject.ProcessBatch(cm_uid)
Теперь, когда я пишу что-то подобное в C#, ошибка присутствует перед созданием приложения, указав следующее:
C#
System.Type oType = default(System.Type);
System.Reflection.Assembly oAssembly = default(System.Reflection.Assembly);
System.Object oObject = null;
oAssembly = Assembly.LoadFrom(path);
oType = oAssembly.GetType("LogicValidator");
oObject = Activator.CreateInstance(oType);
oObject.Initialise("param1", "param2", "param3", AuditTrail, UserInfo, workingDir);
Console.WriteLine("Begin processing...");
oObject.ProcessBatch(cm_uid);
Ошибка
«объект» не содержит определение для «Инициализировать» и не метод расширения «инициализации» принимающий первый аргумент типа «объект» может быть найден (Вы не нашли используя директиву или ссылку на сборку?)
Как мое приложение C# идентифицирует, что метод не существует до компиляции, если он загружен во время выполнения?
Редактировать
Я вычеркнул ниже для целей, помогая другим, кто наткнуться на этот вопрос. Пока он указывает на ответ, другие ответили на него более красноречиво. :-)
Я хотел бы добавить, что нижеследующее работает, но только в том случае, если уже установлены загруженные сборки.
var DLL = Assembly.LoadFile(path);
Type type = DLL.GetType("LogicValidator");
dynamic c = Activator.CreateInstance(type);
c.Initialise("param1", "param2", "param3", audit, UserInfo, workingDir);
Console.WriteLine("Begin processing...");
c.ProcessBatch(cm_uid);
Не используйте 'System.Object' для типа' oObject', используйте нужный тип (т. Е. 'LogicValidator'). В противном случае вам может понадобиться 'dynamic'. – DavidG