C# 引用类型和加载类型的IsSubClassOf的不同行为

C# 引用类型和加载类型的IsSubClassOf的不同行为,c#,C#,当我使用checker程序中引用的“base”类型检查子类(Abstract->deriv)的类型时,与在checker程序中显式加载“base”类型时相比,我看到了不同的行为 因此,如果我在我的主检查器程序中执行此操作,该程序在中引用了基类型(baseType): 将derivType作为程序集加载。ReflectionOnlyLoadFrom(路径到deriv\u dll)->typeToLoad var baseType=typeof(抽象类)//中引用了抽象类的程序集 typeToLoa

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

因此,如果我在我的主检查器程序中执行此操作,该程序在中引用了基类型(baseType):

  • 将derivType作为程序集加载。ReflectionOnlyLoadFrom(路径到deriv\u dll)->typeToLoad
  • var baseType=typeof(抽象类)//中引用了抽象类的程序集
  • typeToLoad.IsSubClassOf(baseType)生成False
  • 但是,如果我这样做:

  • 将基类型作为程序集加载。ReflectionOnlyLoadFrom(路径\u到\u基类型\u dll)->baseType
  • 将derivType作为程序集加载。ReflectionOnlyLoadFrom(路径到deriv\u dll)->typeToLoad
  • 检查typeToLoad.IsSubClassOf(baseType),它的结果为True

  • 非常感谢您的意见。

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


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

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


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

    在您的情况下,这样做的原因是类型具有不同的标识。使用
    LoadFrom
    时,程序集将加载到LoadFrom上下文中,而不是加载到
    Load
    上下文中的引用。由于程序集加载到不同的上下文中,因此程序集中的类型具有不同的标识

    这里有一些关于这个主题的更多信息的链接

    在您的案例中,这样做的原因是类型具有不同的标识。使用
    LoadFrom
    时,程序集将加载到LoadFrom上下文中,而不是加载到
    Load
    上下文中的引用。由于程序集加载到不同的上下文中,因此程序集中的类型具有不同的标识

    这里有一些关于这个主题的更多信息的链接

    我查看了链接,但仍然不太清楚。不管怎样,我设法将DLL中的插件复制到“Loader”bin文件夹,然后从那里加载所有内容,现在它工作了。我检查了链接,但仍然不是很清楚。无论如何,我设法将DLL中的插件复制到“Loader”bin文件夹,然后从那里加载所有内容,现在它可以工作了。