c# - IsAssignableFrom() 在应该返回 true 时返回 false

标签 c# .net reflection

我正在开发一个插件系统,它加载包含在指定文件夹中的 .dll。然后我使用反射来加载程序集,遍历它们包含的类型并识别任何实现我的 IPlugin 接口(interface)的类型。

我正在使用类似于以下的代码进行检查:

foreach(Type t in myTypes )
{
    if( typeof(IPlugin).IsAssignableFrom(t) )
    {
       ...
    }
}

出于某种原因,IsAssignableFrom() 在应该返回 true 时一直返回 false。我已经尝试通过显式地给它一个应该通过的类型来替换 t,它工作正常,但由于某种原因它不能使用从加载的程序集返回的类型。更奇怪的是,代码在我同事的机器上运行良好,但在我的机器上却不行。

有谁知道可能导致这种行为的任何事情吗?

谢谢

最佳答案

当包含当前程序集引用的 IPlugin 类型的程序集与包含您正在迭代的类型的程序集引用的程序集不匹配时,通常会发生这种情况。

我建议你打印:

typeof (IPlugin).Module.FullyQualifiedName

foreach (var type in t.GetInterfaces ()) 
{    
    Console.WriteLine (type.Module.FullyQualifiedName)
}

查看不匹配的地方。

关于c# - IsAssignableFrom() 在应该返回 true 时返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/345413/

相关文章:

c# - 主线程的 SynchronizationContext.Current 如何在 Windows 窗体应用程序中变为 null?

c# - 无法反序列化值类型的 IComparable 字段

c# - EF5 代码优先 : IsLoaded and . AsNoTracking()

swift - 在 Swift 扩展中,获取实际的调用对象?

c# - 动态扩展应用程序的功能?

c# - Visual Studio 2017 中的 Xamarin (Android) 单元测试

java - "Drawing"由控制台应用程序中的字符组成的填充椭圆

.net - Linq 查询从该 XML 解析/获取内容 (WSDL)

security - 数据绑定(bind)和代码混淆

c# - 通过在运行时为 CreateInstance 参数创建正确类型的 List<T> 来通过反射查找方法