在安装.NET 4.5之后,ClaimsIdentity NullReferenceException

我在vs2010中开发了一个现有的.Net 4解决方案,该解决方案使用IIdentity实现来定义当前请求的用户。 我现在想用vs2012继续它的开发。

我在vs2012中打开了解决方案,并将属性中的目标框架设置为.Net 4.但是,当我运行解决方案时,当Web服务器反序列化GenericIdentity对象时,我得到一个exception。 例外情况发生在

at System.Security.Claims.ClaimsIdentity.d__0.MoveNext() at System.Security.Principal.GenericIdentity.OnDeserializedMethod (StreamingContext context) 

exception的原因似乎是未初始化属性Claims。

我所知道的:

  1. .Net 4.5在目标机器上更新.Net 4,而不是并行安装。

  2. GenericIdentity现在来自.Net 4.5中的新类ClaimsIdentity

  3. 将目标框架设置为.Net 4意味着尽管代码仍在使用.NET 4.0运行,但4.5实现在封面下使用,即您无法在visual studio对象浏览器中看到层次结构,但调试器和reflection器显示了派生。

  4. GenericIdentity.OnDeserializedMethod访问ClaimsIdentity Claims属性而不检查null,从而导致NullReferenceException

我遇到的一个解决方案涉及使我的自定义Identity对象inheritance自System.MarshalByRefObject,但问题是自定义Identity对象是由我们组织中所有系统使用的“单点登录”.dll提供的。 这意味着我无法访问它来更改其inheritanceheirachy。

这个问题有替代解决方案或工作方式吗?

只有在使用内置的Visual Studio服务器时才会出现此问题,并且由于我们团队在本地使用IIS来运行我们的开发中的网站,因此我们现在只需花费太多时间就可以使用它。

在appDomain转换之后,问题似乎是围绕对象序列化和反序列化,但我没有时间进一步调查。

更新:.NET 4.5.1不会发生此问题