ConfigurationObjectsImport

ConfigurationObjectsImport

我正在使用反射从源代码下面的dll调用方法

ConfigurationObjectsImport configurationObjectsImport;

Assembly asm;
asm = Assembly.LoadFrom("AssemblyName.dll");
object obj;
Type TYP;
TYP = asm.GetType("CustomImport.Import");
obj = Activator.CreateInstance(TYP);
MethodInfo methodInf = obj.GetType().GetMethod("ExecImport");
object[] args = new object[1];
args[0] = configurationObjectsImport;
methodInf.Invoke(obj, args);


类ConfigurationObjectsImport在当前项目和dll中都使用相同的空间名称复制,但是methodInf.Invoke(obj,args);引发异常“无法将Phenix_Import_Commun.Domaine.ConfigurationObjectsImport类型转换为Phenix_Import_Commun.Domaine.ConfigurationObjectsImport类型”。

最佳答案

我假设正在执行的程序集的configurationObjectsImport类型为Phenix_Import_Commun.Domaine.ConfigurationObjectsImport,但是CustomImport.Import.ExecImport期望的类型与AssemblyName.dll具有相同的名称和名称空间。这是两种不同的类型,碰巧具有相同的名称(这是非常不希望的)。

如果您确实在两个具有相同名称的不同程序集中拥有两种不同类型,并且想要执行此操作和/或没有更改此功能的能力,则需要使用Phenix_Import_Commun.Domaine.ConfigurationObjectsImport的反射来创建AssemblyName.dll对象>并传入。

另一方面,如果您希望它们具有相同的类型,则需要在两个程序集都通用的程序集中定义该类型(定义该类型的第三个程序集,如果AssemblyName.dll,则为执行程序集)引用),并且只有该名称的一种类型定义。

08-28 04:09