我有一个在 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
我遇到的一种解决方案是让我的自定义 Identity 对象从 System.MarshalByRefObject 继承,但问题是自定义 Identity 对象是由在我们组织中的所有系统中使用的“单点登录”.dll 提供的。这意味着我无法访问它来更改其继承继承权。
是否有针对此问题的替代解决方案或解决方法?