【发布时间】:2011-06-16 13:33:40
【问题描述】:
我们正在使用具有动态编译功能的 ASP.NET 网站项目,并且最近转移到 SQL Server 支持的会话状态并开始出现奇怪的错误。我已经弄清楚是什么原因造成的,但我不知道解决它的最佳方法。
在 localhost 上重现的步骤(启用 sql 会话):
-
在 AppCode 中定义一个对象,假设它是一个
DanObject到会话中。Session["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 应用程序——我们的代码库很大,目前不可行:)
【问题讨论】:
标签: asp.net session session-state web-site-project