gpt4 book ai didi

c# - .Net Framework 3.5 反射问题

转载 作者:太空宇宙 更新时间:2023-11-03 21:04:24 24 4
gpt4 key购买 nike

我正在使用反射从源代码下方的 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 引用它)并且该名称只有一个类型定义。

关于c# - .Net Framework 3.5 反射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42254008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com