c# - Assembly.ReflectionOnlyLoadFrom 不工作

标签 c# reflection remoting

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

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

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

谢谢, 股份公司

最佳答案

如果您的库正在引用另一个 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"));
  }
}

这将尝试首先通过全名加载仅反射加载的程序集的所有依赖项,然后通过路径加载(假设依赖项与加载的程序集位于同一目录中)。

关于c# - Assembly.ReflectionOnlyLoadFrom 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2321293/

相关文章:

c# - System.Reflection 没有方法

.net - C# : Restrict . 网络远程处理仅接受本地主机连接

c# - 方法组中泛型调用的 RealProxy Invoke Message 中的 TargetException

c# - 查询SQL时DateTime转换错误

c# - SetValue 64 位机器注册表

c# - 将 "this"作为参数传递是一种不好的做法吗?

c# - 将 C# Activity 附加到一个 Android 应用程序中的 Java Activity

c# - 如何获得实例化泛型的参数类型?

c# - 反射(reflection):从 PropertyInfo 获取 FieldInfo

c# - .Net Remoting 不使用.Net Remoting?