【发布时间】:2013-09-30 10:09:31
【问题描述】:
我有一个在 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 我遇到了让我的自定义身份对象继承自 System.MarshalByRefObject,但问题是自定义身份对象是由我们组织中所有系统使用的“单点登录”.dll 提供的.这意味着我无法访问它来更改其继承继承关系。
对于这个问题是否有替代解决方案或解决方法?
【问题讨论】:
-
这是否与 .NET 4.5.1 Release Candidate 一起重现?从这里下载 --> microsoft.com/en-us/download/details.aspx?id=39328。如果它重现,.NET Framework 团队想看看。请通过 Microsoft dot com 上的 netfx45compat 向我们发送代码示例。谢谢!
-
当我有一些停机时间时,我会用 4.5.1 试试,然后告诉你结果
-
我可以确认 4.5.1 版本不会出现此问题
-
我遇到了这个问题。使我的问题更加复杂的是 IE 没有显示完整的堆栈跟踪。我必须进入事件查看器才能找到关于 Claims Identity 对象的两行。嗯。我目前的“解决方法”是切换到在 IIS 上运行我的应用程序。
-
@janoulle 这正是我必须做的 :)
标签: c# asp.net .net security visual-studio-2012