我有一个集会Library1.dll
其中包含一些接口,这些接口被序列化为字节数组到数据库中。由于某些原因,我们必须更改接口属性和定义。所以现在我正在编写一个迁移实用程序。所以我有两个版本Library1.dll
,在我的实用程序中,我创建了一个文件夹,用于存储新版本的Library1.dll
。该实用程序还引用了Library1.dll
因此在 bin 文件夹中包含Library1.dll
但这个dll是在旧版本上编译的。我的新版本Library1.dll
存储在我传递到的私有路径中Assembly.ReflectionOnlyLoadFrom
函数实例化,因此GetTypes
在加载的程序集上,这进一步使我能够进行数据转换。
但我总是得到ReflectionTypeLoadException
当尝试加载时Library1.dll
来自私人路径。
请大家帮忙!任何帮助,将不胜感激。我真的被困住了。
谢谢,
股份公司
如果您的库引用了另一个 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"));
}
}
这将尝试首先按全名加载仅反射加载的程序集的所有依赖项,然后按路径加载(假设依赖项与加载的程序集位于同一目录中)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)