反映程序集类型时出现文件未找到错误

问题描述 投票:0回答:2

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

c# reflection
2个回答
2
投票

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

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


0
投票

如果有人在 2024 年读到这篇文章,我也遇到了同样的错误,在寻找更多信息时,我发现只需要使用 Assembly.LoadFrom(filePath) 而不是 Assembly.LoadFile(filePath)。这样,程序集就被加载并可以解决其依赖关系。

© www.soinside.com 2019 - 2024. All rights reserved.