首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net Framework3.5反射问题

.Net Framework3.5反射问题
EN

Stack Overflow用户
提问于 2017-02-15 23:50:33
回答 1查看 204关注 0票数 1

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

代码语言:javascript
复制
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);

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-16 00:00:58

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

如果你真的在两个不同的程序集中有两个相同名称的不同类型,并且你想要这样做并且/或者没有能力改变这一点,那么你将需要使用来自AssemblyName.dll的反射来创建一个Phenix_Import_Commun.Domaine.ConfigurationObjectsImport对象,并将其传入。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42254008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档