安装.NET 4.5后出现ClaimsIdentity NullReferenceException问题

4

我有一个已经在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现在从新类ClaimsIdentity中派生出来。NET 4.5 3. 将目标框架设置为.NET 4意味着尽管代码仍在使用.NET 4.0运行,但在幕后使用了4.5实现,即您无法在Visual Studio对象浏览器中看到层次结构,但调试器和反射器显示继承关系。 4. GenericIdentity.OnDeserializedMethod访问ClaimsIdentity Claims属性时没有检查null,导致NullReferenceException。
我遇到的solution之一涉及使我的自定义Identity对象继承自System.MarshalByRefObject,但问题在于自定义Identity对象由“单点登录” .dll提供,该.dll在我们组织中的所有系统中使用。这意味着我无法访问它以更改其继承关系。

这个问题是否有其他解决方案或变通方法?


这个问题是否在.NET 4.5.1 Release Candidate中重现?请从此处下载-->http://www.microsoft.com/en-us/download/details.aspx?id=39328。如果可以重现,.NET Framework团队希望查看一下。请通过netfx45compat at Microsoft dot com向我们发送代码示例。谢谢! - Varun
当我有空闲时间时,我会尝试使用4.5.1并让您知道结果。 - Declan McNulty
我可以确认,在4.5.1版本中不会出现这个问题。 - Declan McNulty
我遇到了这个问题。让问题变得更加复杂的是,IE没有显示完整的堆栈跟踪。我不得不进入事件查看器才能找到有关声明标识对象的两行信息。真烦人。我目前的“解决方法”是切换到在IIS上运行我的应用程序。 - janoulle
@janoulle 那正是我也不得不做的事情 :) - Declan McNulty
1个回答

0

只有在使用内置的Visual Studio服务器时才会出现此问题,因为我们团队在本地使用IIS来运行开发网站,所以我们只能接受它,因为我已经花费了太多时间。

问题似乎围绕着应用程序域转换后的对象序列化和反序列化,但我没有时间进一步调查。

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


这是一个已知问题,当从4.0序列化到4.5.x时会出现。 - Brent Schmaltz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接