C#在2个组件中输入质量

时间:2014-09-22 12:40:39

标签: c# .net assemblies

我有项目A参考项目COMMON。在项目COMMON中我有接口T. 我有另一个DLL B.B项目引用了项目COMMON。 COMMON dll位于两个文件夹中。

在项目A中,我使用Assembly.LoadFromFile加载程序集B.我需要找到所有类型实现的接口T.

var types = (from type in assembly.GetExportedTypes() 
where typeof(T).IsAssignableFrom(type) select type).ToList();

我获得0大小的收藏。另外,我在Quick Watch对话框窗口中手动检查类型,如:

typeof(T) == assembly.GetExportedTypes()[0].GetInterfaces()[0] 

,结果为假。

3 个答案:

答案 0 :(得分:2)

这个表达式:

X.IsAssignableFrom(Y)

基本上问一下,你能否做到相当于:

X x = expressionOfTypeY;

在你的情况下,你问这个:

ClassType x = expressionOfInterfaceType;

这是错误的方法。

请尝试使用此LINQ查询:

where typeof(T).IsAssignableFrom(type)

答案 1 :(得分:1)

不应该是

var types = (from type in assembly.GetExportedTypes() 
where typeof(T).IsAssignableFrom(type) select type).ToList();

答案 2 :(得分:0)

好的,我解决了我的问题。

我从插件文件夹中删除了common.dll,并将“Copy Local”复选为false。 我也在两个项目中使用autofac,所以对于这个DLL,我做了同样的步骤。

感谢您的回答。