我们正在使用具有动态编译的 ASP.NET 网站项目,并且最近移动到 SQL Server 支持的会话状态并开始出现奇怪的错误。我已经弄清楚是什么原因造成的,但我不知道解决它的最佳方法。
在 localhost 上重现的步骤(启用 sql 会话):
放置一个在 AppCode 中定义的对象,假设它是一个
DanObject
进入会话。会话["x"] = new DanObject();
(Session被序列化到数据库)
- 修改应用代码中的某些内容,导致站点在下一次请求时重新编译
- 向访问会话的任何页面发出请求
错误是“无法找到程序集 'App_SubCode_CS.rmdbqb81, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'。”
发生的情况是,每次 AppCode 被编译时,它都会进入一个随机命名的程序集。当我的 Session 第一次被序列化时,AppCode 恰好被命名为 AppCode_123。当我修改我的应用程序时,AppCode 现在是 AppCode_456。但是,存储在我的数据库中的 Session 在 AppCode_123 中定义了一个对象。当 Session 尝试对 DanObject 进行二进制反序列化时,它会因为找不到 AppCode_123 而崩溃。
我可以解决这个问题的最简单方法是什么?
*请不要说切换到 Web 应用程序——我们的代码库很大,目前不可行 :)