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 现在派生自 .Net 4.5 中的新类 ClaimsIdentity

  3. 将目标框架设置为 .Net 4 意味着尽管代码仍在使用 .NET 4.0 运行,但在幕后使用了 4.5 实现,即您在 Visual Studio 对象浏览器中看不到层次结构,但调试器和反射器显示派生.

  4. GenericIdentity.OnDeserializedMethod 访问 ClaimsIdentity Claims 属性而不检查 null,导致 NullReferenceException

我遇到的一种解决方案是让我的自定义 Identity 对象从 System.MarshalByRefObject 继承,但问题是自定义 Identity 对象是由在我们组织中的所有系统中使用的“单点登录”.dll 提供的。这意味着我无法访问它来更改其继承继承权。

是否有针对此问题的替代解决方案或解决方法?

4

1 回答 1

0

这个问题只在使用内置的 Visual Studio 服务器时发生,并且我们作为一个团队在本地使用 IIS 在开发中运行我们的站点,我们将忍受它,因为我现在花了太多时间在它上面。

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

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

于 2013-10-14T15:28:02.313 回答