【问题标题】:Stuck with "Cannot find type" error using CreateInstance()使用 CreateInstance() 遇到“找不到类型”错误
【发布时间】:2015-02-23 22:23:22
【问题描述】:

我正在尝试在 C# 项目的连接实用程序中使用 .CreateInstance(),同时序列化 XML。 .Unwrap() 用于解开可序列化的返回类型并获取我正在尝试创建的类型的实例。

String fileToLoad = @"D:\RPMOpen\svnCobra\conversion\aui\Model\bin\Debug\RPM_Model";
String file = Path.GetFileName(fileToLoad);
AbstractResponseMessageData response = 
    (AbstractResponseMessageData)Activator.CreateInstance(file, responseName).Unwrap();

我的程序集 RPM_Model @"D:\RPMOpen\svnCobra\conversion\aui\Model\bin\Debug\RPM_Model" 加载正常,但由于 responseName 中的 ARC_LOGONRS 类型,我收到以下错误:

方法 ConnectUtil.Execute 中的错误: 无法从程序集 RPM_Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 加载类型 ARC_LOGONRS

现在,这就是我陷入错误的原因:

1.确实引用了错误中指定的程序集。
2.我的 GAC 中没有任何东西覆盖我的 /Debug 文件夹中的 .dll。
3. 我已确保我拥有正确版本的 .dll。
4. .dll 没有其他依赖项。
5. 我的项目和 .dll 具有相同的目标平台。
6.知道我正确地引用了程序集,就好像我将 ARCLOGON_RS 放在我的代码中并将鼠标悬停在它上面我看到了

类 RPM.Model.Data.ARCLOGON_RS

我可以f12 关注它以查看它的属性。
7. 我已经清理并重建了这两种解决方案。
8.类型确实有一个公共的默认构造函数,并且类是公共的。
9. .dll 参考节点中。
10.确实将正确的程序集名称作为参数传递。

我的问题是是否有人对我的项目为什么会抛出此错误有任何其他想法,以及我如何着手修复它,因为我已经完全用完了诊断。

非常感谢您的帮助。

【问题讨论】:

  • 该类型是否有公共的默认构造函数?
  • @RufusL 是的,抱歉,忘记了,已编辑问题。
  • 愚蠢的问题,但 DLL 是否与您正在运行的应用程序存在于同一文件夹中?
  • 有内部异常吗?根据:msdn.microsoft.com/en-us/library/…,原因可能是DllNotFound,EntryPointNotFound,或者TypeAccess异常。这至少应该有助于缩小范围。
  • 内部异常只是将我指向AbstractResponseMessageData 行。从这三个中我认为它必须是 EntryPointNotFound 但我不知道如何进一步诊断异常。

标签: c# dll assemblies createinstance


【解决方案1】:

将 typeName 提供给 CreateInstance() 时,我必须对完整类型进行硬编码。尽管我的错误看起来好像在RPM.Model.Data 内,但显然不是。将responseName 编辑为RPM.Model.Data.ARC_LOGONRS 而不是简单的ARC_LOGONRS 是克服错误所必需的。

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    相关资源
    最近更新 更多