在安装.NET 4.5之后,ClaimsIdentity NullReferenceException

时间:2013-09-30 10:09:32

标签: c# asp.net .net security visual-studio-2012

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

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

中发生异常
at System.Security.Claims.ClaimsIdentity.<get_Claims>d__0.MoveNext()
at System.Security.Principal.GenericIdentity.OnDeserializedMethod
                                                  (StreamingContext context)

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

我已经知道的事情:

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

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

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

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

  5. 我遇到的一个solution涉及使我的自定义Identity对象继承自System.MarshalByRefObject,但问题是自定义Identity对象是由“单点登录”.dll提供的,用于所有系统中我们的组织。这意味着我无法访问它以更改其继承heirachy。

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

1 个答案:

答案 0 :(得分:0)

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

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

更新:.NET 4.5.1

不会出现此问题