【发布时间】:2013-07-18 13:43:03
【问题描述】:
我有一个具有以下文件夹结构的应用程序:
Application\Modules\XXX
当然,XXX 中的任何程序集都会在 XXX 中找到其他程序集。
问题发生在使用反射实例化的某些实例上:
TProvider providerInstance = (TProvider)Activator.CreateInstance(providerType));
TProvider 有一个方法可以返回在另一个程序集中定义的类(也存储在 XXX 中)。在调用必须加载引用的 providerInstance 的该方法时,我收到了一个 FileNotFoundException,即即使依赖项位于同一个 XXX 文件夹中,也找不到依赖程序集。
查看融合日志,程序集加载器仅检查 Application 文件夹,而不是 XXX ...
知道为什么会发生这种情况以及如何解决吗?
谢谢。
【问题讨论】:
-
程序集加载和您创建对象实例的方式彼此无关。
<probing privatePath="Modules\XXX"/>应该可以帮到你。 -
@Dennis:有些依赖只有在调用 providerInstance 的某些方法时才能解决。如果 providerInstance 的方法将返回在另一个程序集上定义的类,则该类将仅在第一次调用该方法时才被解析。如果我使用 ActivatorInstance 创建实例,它会失败。如果我正常创建它,它可以工作。
-
@Dennis:我不应该需要它,因为所有程序集都位于同一个文件夹中。
-
我认为,您误解了程序集加载和解析机制。你如何获得
providerType?通过Assembly.Load/LoadFrom然后通过类型枚举? -
@Dennis:我正在使用 Assembly.LoadFile(filename) 加载它们,然后搜索一些特定类型,是的。
标签: c# .net dependencies .net-assembly fusion