Assembly.ReflectionOnlyLoadFrom不工作

我有一个Assembly Library1.dll ,它包含一些接口,这些接口被序列化为数据库中的字节数组。 出于某些原因,我们必须更改接口属性和定义。 所以现在我正在编写一个迁移实用程序。 所以我有2个版本的Library1.dll ,在我的实用程序中我创建了一个文件夹,我存储了新版本的Library1.dll 。 此实用程序反过来也引用Library1.dll因此bin文件夹中包含Library1.dll但此dll是在旧版本上编译的。 我的新版本的Library1.dll存储在一个私有路径中,我将传递给Assembly.ReflectionOnlyLoadFrom函数来实例化,因此加载了程序集上的GetTypes ,这将使我能够进行数据转换。

但是当我尝试从私有路径加载Library1.dll时,我总是得到ReflectionTypeLoadException

请帮帮忙!!! 任何帮助,将不胜感激。 我真的被卡住了。

谢谢,AG

如果您的库引用了另一个dll, GetTypes在遇到使用外部类型的类型时将失败。 与正常的程序集加载不同,ReflectionOnly程序集加载不会解析依赖项。 您可以订阅AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve并根据需要加载依赖项,也可以预加载它们。

这是我用于此的代码:

 var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyPath); foreach (var assemblyName in assembly.GetReferencedAssemblies()) { try { Assembly.ReflectionOnlyLoad(assemblyName.FullName); } catch { Assembly.ReflectionOnlyLoadFrom(Path.Combine(Path.GetDirectoryName(assemblyPath), assemblyName.Name + ".dll")); } } 

这将尝试首先按fullname加载reflection加载程序集的所有依赖项,然后按路径加载(假设依赖项与加载的程序集位于同一目录中)。