Метод не найден в загруженной сборке
У меня есть приложение, которое загружает сборку другого приложения и вызывает методы из этой сборки для целей тестирования. Ниже приведен общий пример этого кода.
testAssembly = Assembly.LoadFrom( path );
var classes = testAssembly.GetTypes();
Type mainForm = classes.Where( c => c.Name == "MainForm" ).SingleOrDefault();
var form = Activator.CreateInstance( mainForm, null );
Type secondForm = classes.Where( c => c.Name == "SecondForm" ).SingleOrDefault();
var sf = Activator.CreateInstance( secondForm , new object[] { form } );
MethodInfo secondFormMethod = secondForm.GetMethod( "SecondFormMethod" );
secondFormMethod.Invoke( sf, new object[] { } );
Это работает в точку. Проблема заключается в том, что когда метод запускается, он в конечном итоге приводит к библиотеке, на которую ссылается secondFormMethod, и возвращается с ошибкой "Метод не найден".
Кажется, ни одна из моих ссылок не нарушена ни в одном приложении.
Этот метод работает при запуске из второго приложения, которым я пытаюсь манипулировать.
Не уверен, что я могу делать неправильно.
2 ответа
LoadFrom()
загружает только одну сборку, а не сборку и все ее зависимости. Вы должны вызывать его для каждой из сборок (хотя только те, которые находятся в этом стеке вызовов, если вы хотите избежать загрузки всего).
Хорошо, если вы успешно получаете тип для 'secondForm' и 'SecondFormMethod' принадлежит 'secondForm', то вы можете просто получить метод из этого типа. Поскольку мы не знаем, что такое eventList, это было бы возможным быстрым решением:
MethodInfo secondFormMethod = secondForm.GetMethod( "SecondFormMethod" );
Вам также может понадобиться использовать флаги привязки в зависимости от того, где метод фактически определен (т. Е. Унаследован ли он или нет). См. Документацию по флагам привязки здесь: Перечисление флагов привязки