我有一个应用程序,该应用程序加载另一应用程序的程序集,并从该程序集中调用方法进行测试。下面是该代码的一个通用示例。
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引用一个库,并返回"未找到方法"错误。
在这两个应用程序中,我的参考资料似乎都没有被破坏。
当从我试图操作的第二个应用程序中激发时,此方法就可以工作。
不确定我可能做错了什么。
LoadFrom()
只加载一个程序集,而不加载程序集及其所有依赖项。您需要为每个程序集调用它(如果您想避免加载所有内容,则只调用该特定调用堆栈中的程序集(。
好吧,假设您成功地获取了'secondForm'的类型,并且'SecondFormMethod'属于'secondForm'',那么您就可以从该类型中获取方法。由于我们不知道eventList是什么,这将是一个可能的快速解决方案:
MethodInfo secondFormMethod = secondForm.GetMethod( "SecondFormMethod" );
您可能还需要使用绑定标志,这取决于方法的实际定义位置(即它是继承的还是其他方式(。。请参阅此处的绑定标志文档:绑定标志枚举