关于C#:加载同一程序集的不同版本

关于C#:加载同一程序集的不同版本

Loading different versions of the same assembly

使用反射,我需要加载同一程序集的2个不同版本。 是否可以在同一过程中将2个版本加载到2个不同的AppDomain中?

我需要将一些数据从旧版本的应用迁移到新版本。
请让我知道是否可行,或者我应该使用2个单独的过程。


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

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

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

https://www.infosysblogs.com/microsoft/2007/04/loading_multiple_versions_of_s.html


更新:我以为我会把我的发现作为答案。在开发工作量,跟踪运行时错误等方面,反射被证明太复杂了。我记得当很久以前遇到类似情况时,我会使用两种不同的方法来做另一种方法(谢谢布兰登)。

这是计划:没什么好看的,但是在开发和故障排除方面更容易。由于这是一项一次性的工作,因此我们只需使其工作即可。

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

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

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


推荐阅读