从加载的装配中找不到方法

时间:2018-07-26 17:47:39

标签: c# reference .net-assembly invoke method-invocation

我有一个应用程序,该应用程序加载另一个应用程序的程序集并出于测试目的从该程序集调用方法。下面是此代码的一般示例。

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 个答案:

答案 0 :(得分:0)

LoadFrom()仅加载一个程序集,而不加载该程序集及其所有依赖项。您需要为每个程序集调用它(但是,如果要避免加载所有内容,则只调用该特定调用堆栈中的程序集即可。)

答案 1 :(得分:0)

好吧,假设您成功获取了“ secondForm”的类型,并且“ SecondFormMethod”属于“ secondForm”,那么您只需从该类型获取方法即可。由于我们不知道什么是eventList,因此这可能是一种快速的解决方案:

MethodInfo secondFormMethod = secondForm.GetMethod( "SecondFormMethod" );

根据方法的实际定义位置,您可能还需要使用绑定标志(即,是否继承)。请参阅此处的绑定标志文档: Binding Flags Enumeration