我在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。
我已经知道的事情:
.Net 4.5在目标计算机上更新.Net 4,而不是并行安装。
GenericIdentity现在源自.Net 4.5中的新类ClaimsIdentity
将目标框架设置为.Net 4意味着尽管代码仍在使用.NET 4.0运行,但4.5实现在封面下使用,即您无法在visual studio对象浏览器中看到层次结构,但是调试器和反射器显示派生。
GenericIdentity.OnDeserializedMethod访问ClaimsIdentity Claims属性而不检查null,导致NullReferenceException
我遇到的一个solution涉及使我的自定义Identity对象继承自System.MarshalByRefObject,但问题是自定义Identity对象是由“单点登录”.dll提供的,用于所有系统中我们的组织。这意味着我无法访问它以更改其继承heirachy。
这个问题是否有替代解决方案或工作方式?
答案 0 :(得分:0)
只有在使用内置的Visual Studio服务器时才会出现此问题,并且由于我们团队在本地使用IIS来开发我们的网站,因此我们只会花费太多时间现在。
问题似乎是在appDomain转换后围绕对象序列化和反序列化,但我没有时间进一步调查。
更新:.NET 4.5.1
不会出现此问题