【发布时间】:2010-02-17 15:46:41
【问题描述】:
当两个版本之间发生重大更改时,我们提出了一种处理向后兼容性的策略。我们在当前的 AppDomain 中加载以前版本的程序集,用旧版本类型反序列化一些数据,然后将它们转换为新版本中的等价物。
- 我应该注意这种方法是否存在任何缺陷?
- 如果我在省略其程序集版本时尝试通过反射加载类型会发生什么情况,如果当前 AppDomain 中存在该类型的两个版本,它是否总是加载该类型的最新版本?
编辑:
这是问题#2的一个场景,
这两个程序集加载在同一个 AppDomain 中:
MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089MyAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089
两个程序集都定义了 MyAssembly.MyType 类型。
那么如果某些代码使用这种反射:
Type t = Type.GetType("MyAssembly.MyType, MyAssembly, Culture=neutral, PublicKeyToken=b17a5c561934e089");
这个调用会确定返回MyAssembly.MyType, MyAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089吗?
我想如果我在反序列化存在于同一程序集的两个加载版本中的类型时使用BinaryFormatter.AssemblyFormat = FormatterAssemblyStyle.Simple,也会发生同样的情况。
【问题讨论】:
标签: .net assemblies versioning appdomain