从会话状态读取时出现InvalidCastException异常
本文关键字:InvalidCastException 异常 会话状态 读取 | 更新日期: 2023-09-27 17:49:23
当我在Visual Studio 2013中调试我的网站项目时,当我试图将会话项强制转换为特定类型(ZZZZ(时,我遇到了一个问题。
return (ZZZZ) Session["SessionItem"];
引发InvalidCastException,内容为
类型为"System"的异常。中出现InvalidCastExceptionApp_Code.axv-bzrg.dll,但未在用户代码中处理附加信息:无法强制转换类型为"XXX"的对象。YYYY。ZZZZ’到类型XXX。YYYY。ZZZZ’。
我为添加了一个手表项目
(WebUser) Session["LoggedInUser"]
手表的Value部分显示了以下内容:
类型"XXX。YYYY。"ZZZZ"同时存在于"App_Code.asv bzrg.dll"answers"App_Code.ys_ymegf.dll">
我导航到临时ASP。NET文件文件夹
C: ''用户_________ ''AppData''Local''Temp''临时ASP。NETFiles''root''dc8aa7ce''b2661c39
两个DLL文件就在那里。我认为App_Code DLL是在每个页面请求上生成的,但之前的DLL没有被删除,导致Temp目录中有两个重复的类型。为什么会发生这种情况,我该如何着手解决?
这在某种程度上是意料之中的行为。
第一次导航到页面-对象添加到会话状态,类型为page_V1.dll:MyType
。
您决定触摸页面的源来修复某些问题,因为它不会杀死会话cookie。再次导航到同一页面将尝试从内存中的会话状态中获取对象(会话状态不会丢失,因为应用程序池仅因页面更改而未重新启动(。此时,您的页面再次编译,现在尝试将会话中存储的类型大小写为新类型page_v2.dll:MyType
,这确实会失败,因为类型彼此不相关(即使它们在其他方面是相同的(。
修复:
- 出于调试目的-启动新的浏览器会话/清除cookie或只触发应用程序池回收(即通过触摸web.Config(
- 考虑将对象移动到类库项目中,并从网站添加对它的引用,这样可以控制何时真正重新编译类型,从而不会因为动态生成的程序集文件名而丢失标识