net*_*x01 9 c# reflection remoting
我有一个Library1.dll包含一些接口的程序集,它们被序列化为数据库中的字节数组.出于某些原因,我们必须更改接口属性和定义.所以现在我正在编写一个迁移实用程序.所以我有2个版本Library1.dll,在我的实用程序中,我创建了一个文件夹,我存储了新版本Library1.dll.这个实用程序反过来也引用Library1.dllbin文件夹包含Library1.dll但是这个dll是在旧版本上编译的.我的新版本Library1.dll存储在一个私有路径中,我传递给Assembly.ReflectionOnlyLoadFrom函数实例化,因此GetTypes在加载的程序集上进一步使我能够进行数据转换.
但是ReflectionTypeLoadException当我试图Library1.dll从私人路径加载时我总是得到.
请帮帮忙!!! 任何帮助,将不胜感激.我真的被卡住了.
谢谢,AG
Arn*_*sen 19
如果您的库引用了另一个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"));
}
}
Run Code Online (Sandbox Code Playgroud)
这将尝试首先按fullname加载反射加载程序集的所有依赖项,然后按路径加载(假设依赖项与加载的程序集位于同一目录中).
| 归档时间: |
|
| 查看次数: |
6102 次 |
| 最近记录: |