当一个程序集包含引用另一个程序集的类型时,使用反射

本文关键字:程序集 类型 反射 另一个 引用 包含 一个 | 更新日期: 2023-09-27 18:36:33

我从以下代码中得到一个ReflectionTypeLoadException:

var myAssembly = Assembly.LoadFrom(myDLL);    
var types = myAssembly.GetTypes())

myDLL 引用另一个程序集中另一个文件中的类("myDependency.dll")
我确保此文件驻留在应用程序目录中,并且与"myDLL"文件位于同一文件夹中。

在这种情况下如何能够正确加载 myDLL ?

当一个程序集包含引用另一个程序集的类型时,使用反射

我会尝试调用:

AssemblyName[] referenced = myAssembly.GetReferencedAssemblies();

然后循环访问 AssemblyName 对象并尝试加载这些对象,然后再调用myAssembly.GetTypes()

  1. 确保所有程序集(dll 和 exe 包括引用的程序集)都是最新的(平台、配置和版本/生成日期)并且位于 exe 的目录中。

    尝试在生成之前删除所有项目的 OBJ 和 BIN 目录,以帮助验证这一点。

  2. 请确保 GAC 中没有其他版本,也没有 %PATH 中的目录。

我很自豪地宣布,我已经破坏了我的周五晚上由Visual Studio 2010引起的一些愚蠢的"眼睛持久性"现象(我猜)。我刚刚将我的 DependencyDLL 项目复制粘贴到一个全新的程序集/项目中,删除了旧的程序集/项目,更新了旧引用以指向新的 DependencyDLLNew,瞧:这成功了。问题解决了。感谢那些帮助过的人。