【问题标题】:ClaimsIdentity NullReferenceException after installing .NET 4.5安装 .NET 4.5 后的 ClaimsIdentity NullReferenceException
【发布时间】: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没有初始化。

我已经知道的:

  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

一个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


【解决方案1】:

只有在使用内置 Visual Studio 服务器时才会出现此问题,并且作为一个团队,我们作为一个团队在本地使用 IIS 来运行我们的开发站点,我们将忍受它,因为我刚刚花费了太多时间现在就可以了。

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

更新:.NET 4.5.1 不会出现此问题

【讨论】:

  • 这是从 4.​​0 -> 4.5.x 序列化时的已知问题。
猜你喜欢
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 2022-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
相关资源
最近更新 更多