加载同一程序集的不同版本

时间:2008-09-12 00:45:52

标签: c# .net reflection dll assemblies

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

我需要从旧版本的应用程序到新版本进行一些数据迁移。 如果可能,请告诉我,或者我应该使用2个单独的流程。

2 个答案:

答案 0 :(得分:14)

如果你是在设计时这样做的(你表明你不是这样做的话),这对你有帮助:

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

如果你是通过反射动态做的(这里看起来像这样),这可能对你有所帮助:

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

答案 1 :(得分:5)

更新:我想我会将我的发现作为答案发布。事实证明,反思在开发工作,跟踪运行时错误等方面过于复杂。我记得在长时间遇到类似情况时使用两种不同的流程做不同的方法(谢谢Brandon)。

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

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

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

远程服务器使用公共数据来实例化和加载新对象。调用新类型的函数来保存其数据。