重新编译时在同一个类上抛出错误

时间:2014-12-10 11:35:27

标签: c# asp.net

当我在网站上创建一个项目时,我收到一个奇怪的错误。

  

[A] StDataAccess.AgentInfo无法转换为[B] StDataAccess.AgentInfo。
  类型A源自位于'C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP的上下文'Default'中的'App_Code.mwvc4o1b,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'。 NET Files \ online_7 \ b2fb7384 \ 92a5cc98 \ App_Code.mwvc4o1b.dll'。
  类型B源自位于'C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP的上下文'Default'中的'App_Code.05yjxsnv,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'。 NET Files \ online_7 \ b2fb7384 \ 92a5cc98 \ App_Code.05yjxsnv.dll'。

正如您所看到的,Namespace / Class是相同的,我没有在编译之间更改该类的任何内容,但我更改为父命名空间中的另一个类(StDataAccess)。 AgentsInfo是一个非常简单的类,有10个属性(string / int)。没什么复杂的。我从会话中检索此类时发生错误:

AgentInfo ag = (AgentInfo) HttpContext.Current.Session["AgentInfo"];

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

基本上你已经更新了程序集 - 会话中的对象来自" old"汇编,你不能在" new"中投射到一个类型。程序集,因为类型与它们的原始程序集紧密绑定。

选项:

  • 准备在更新网站时丢弃会话
  • 仅限商店"中立"会话中的数据(字符串,字节数组等)
  • 进行滚动部署,避免在要更新的服务器上创建新会话,然后当所有会话都已停止时,您可以更新服务器