【问题标题】:File not found error when reflecting assembly types反映程序集类型时找不到文件错误
【发布时间】:2011-12-05 06:55:45
【问题描述】:

遍历 *.dll 文件的目录,找到它们并为每个文件创建一个程序集引用。

一旦我有了一个反射对象,我就会遍历每个对象中可用的所有类型,我想从中获取集合中每个类型的自定义属性:

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 认为无法建立引用是正确的。 Base,出于某种原因,需要在参考池之外定义(在 bin 目录中),即使应用程序实际上并不需要它。对我来说没有意义,但它有效。谢谢。

【问题讨论】:

  • 请包含所有相关代码。
  • 你可能想打电话给GetExportedTypes()

标签: c# reflection


【解决方案1】:

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

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

【讨论】:

  • 有道理,目录下目前有两个程序集,Objects.Base 和 Objects.Methods。方法依赖于 Base,这是它在集合中迭代的第一个文件。但话又说回来,它不应该告诉我找不到文件。将查看该工具以查看正在引用哪些文件。
猜你喜欢
  • 1970-01-01
  • 2011-12-23
  • 2012-10-13
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 2013-04-05
  • 2021-03-20
  • 2022-11-03
相关资源
最近更新 更多