我正在开发一个插件系统,它加载包含在指定文件夹中的 .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/