我有一个已经在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在我们组织中的所有系统中使用。这意味着我无法访问它以更改其继承关系。
这个问题是否有其他解决方案或变通方法?