使用反射,我需要加载同一程序集的 2 个不同版本。我可以在同一进程中加载​​ 2 个不同 AppDomain 中的 2 个版本吗?

我需要将一些数据从旧版本的应用程序迁移到新版本。请告诉我这是否可行,或者我应该使用两个单独的进程。

有帮助吗?

解决方案 2

更新: :我想我会把我的发现作为答案。事实证明,反射在开发工作、跟踪运行时错误等方面过于复杂。我记得很久以前面对类似的情况时,我使用了两种不同的流程,采用了不同的方法(谢谢布兰登)。

这是计划:没有什么优雅的,但在开发和故障排除方面更容易。由于这是一项一次性工作,我们只需让它发挥作用即可。

托管具有新版本应用程序的远程处理进程(我称之为服务器)。远程处理客户端有旧版本的参考。

远程客户端实例化并加载具有迁移所需数据的对象。将旧对象转换为常见的可序列化对象并作为参数传递给服务器。

Remoting Server 使用通用数据来实例化和加载新对象。调用新类型上的函数来保存其数据。

其他提示

如果您在设计时这样做(您表明您没有这样做),这应该可以帮助您:

http://blogs.msdn.com/abhinaba/archive/2005/11/30/498278.aspx

如果您通过反射动态地执行此操作(看起来像此处的情况),这可能会帮助您:

http://infosysblogs.com/microsoft/2007/04/loading_multiple_versions_of_s.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top