2011-10-11 84 views
1

遍历* .dll文件的目录,找到它们并为每个文件创建一个Assembly引用。反射装配类型时未找到文件错误

string[] files = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + "Methods", "*.dll"); 

foreach (string s in files) 
{ 
    Assembly asm = Assembly.LoadFile(s); 

    Type[] asmTypes = asm.GetTypes(); 

    bool isCorrect = false; 

    foreach (Type type in asmTypes) 
    { 
     1. var customAttribs = type.GetCustomAttributes(typeof(BaseModelAttribute), false); 
    } 
} 

[更新]:

一旦我有一个反射的物体,我经历了所有在每个可用的类型,从中我想获得集合中的每个类型的自定义属性迭代:在#1行提出异常

此代码一直工作到foreach循环,当我得到一个异常说文件找不到,这是奇怪的,因为我从文件创建一个程序集引用在代码块中更高(代码中未提及)。

[更新]:Erno在假设无法建立参考时是正确的。基于某种原因,需要在参考池之外(在bin目录中)定义,即使应用程序实际上不需要它。对我来说没有意义,但它有效。谢谢。

+2

请包括所有相关的代码。 – James

+1

您可能想调用'GetExportedTypes()'来代替。 – leppie

回答

2

当.NET无法找到文件时,它可能正在尝试加载当前反射的程序集依赖的程序集。

您可以使用Fuslogvw.exe(SDK)查找正在搜索的程序集。

+0

是有道理的,目录中有两个程序集Objects.Base和Objects.Methods。方法依赖于Base,这是它在集合中迭代的第一个文件。但是再一次,它不应该告诉我文件找不到。将查看该工具以查看哪些文件正在被引用。 – JadedEric