我们正在使用 ASP.NET 视图状态来存储我们自己的对象(即,不仅仅是原始类型)。每次我们进行构建时,构建号都会增加。我们试图解决的问题是在服务器更新期间:
- 用户加载页面
- 我们部署了一个新版本的 Web 应用程序
用户在同一页面上导致回发,并引发异常:
- HttpException:此页面的状态信息无效,可能已损坏。
- ViewStateException:无效的视图状态。
- ArgumentException:序列化数据无效。
- FileLoadException:无法加载文件或程序集“[我们的程序集],Version=[我们的新版本],Culture=neutral,PublicKeyToken=...”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配
我理解为什么会发生这种情况 - ViewState 已使用该类的先前版本进行序列化,然后尝试使用新版本进行反序列化,而 .NET 序列化不支持这一点。
我们考虑过创建自定义 PageStatePersister 并使用 JSON(然后对其进行加密)来序列化/反序列化,因为数据成员几乎总是在构建之间兼容。
还有其他想法吗?