【问题标题】:Different behavior of IsSubClassOf for referenced type and loaded typesIsSubClassOf 对于引用类型和加载类型的不同行为
【发布时间】:2010-07-20 00:51:01
【问题描述】:

当我使用检查程序中引用的“基本”类型时检查子类(Abstract->deriv)的类型时,与显式加载“基本”类型时相比,我看到了不同的行为在检查程序中。

所以如果我在我的主 Checker 程序中执行此操作,该程序在以下位置引用了基类型 (baseType):

  1. 将 derivType 加载为 Assembly.ReflectionOnlyLoadFrom(Path_to_deriv_dll)->typeToLoad
  2. var baseType = typeof(abstract_class) //abstract_class 的程序集被引用在
  3. typeToLoad.IsSubClassOf(baseType) 产生 False

但是,如果我这样做:

  1. 将 baseType 加载为 Assembly.ReflectionOnlyLoadFrom(Path_to_base_type_dll)->baseType
  2. 将 derivType 加载为 Assembly.ReflectionOnlyLoadFrom(Path_to_deriv_dll)->typeToLoad
  3. 检查 typeToLoad.IsSubClassOf(baseType),结果为 True

感谢任何想法。

【问题讨论】:

    标签: c#


    【解决方案1】:

    在您的情况下,原因是类型具有不同的身份。使用LoadFrom 时,程序集被加载到LoadFrom 上下文中,而引用被加载到Load 上下文中。因为程序集被加载到不同的上下文中,所以程序集中的类型具有不同的标识。

    这里有一些链接,其中包含有关该主题的更多信息 http://blogs.msdn.com/b/suzcook/archive/0001/01/01/57248.aspx http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57143.aspx

    【讨论】:

    • 我检查了链接,但仍然不是很清楚。无论如何,我设法将插件 dll 复制到“Loader”bin 文件夹,然后从那里加载所有内容,现在它可以工作了。
    【解决方案2】:

    确保第一个选项中引用的程序集版本与第二个选项中动态加载的程序集版本相同。如果您在两种情况下加载相同的确切程序集(相同版本等),您应该得到相同的答案。

    但是,如果您引用的是不同版本的程序集,您可能会得到不同的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多