.Net Framework 3.5反思问题

时间:2017-02-15 15:50:33

标签: c# .net reflection

我使用反射从源代码

下面的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"。

1 个答案:

答案 0 :(得分:4)

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

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

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