我需要加载不同版本的程序集(我的应用程序中已经具有相同名称的程序集)。
我能够加载程序集并加载需要使用反射调用的方法,但是当我通过将类对象作为参数传递来调用该方法时,我遇到了一个异常(exception),即无法将类对象转换为参数形参的类型。
样例代码-
Assembly myAssembly = Assembly.LoadFrom("Assembly Path for assembly with different version");
object classObject = myAssembly.CreateInstance("ClassName");
Type classType = myAssembly.GetType("ClassName");
MethodInfo myMethod = classType.GetMethod("MyMethod", BindingFlags.Instance);
// Creating an object of class in the latest assembly and need to pass this
// to method in assembly with different version.
ClassInBothVesions parameter = new ClassInBothVesions();
myMethod.Invoke(classObject, new object[] { parameter });
这里参数是我在汇编中具有的类的对象,但是由于参数类是在当前版本的汇编中创建的。当我尝试将其传递给先前程序集的方法时,出现了一个无法转换的异常。
我怎样才能做到这一点?让我知道是否需要在这里输入更多信息。提前致谢。
最佳答案
您应该 checkout 托管扩展框架(MEF)。它使您想做的事情变得容易得多,并使您不必担心AppDomain和不同的程序集。
编辑:
如果仅希望使用反射来实现所需的功能,则需要在应用程序中使用灵活的对象模型。这种方法的基础是MEF在引擎盖下进行的操作。您真正有能力执行此操作的地方是.Net远程处理,因此建议您仔细阅读。
您需要什么:
您可以尝试以下方法:
一种。这将导致程序集B加载到AppDomain中。