Razor视图(MVC .NET 4.0)和Microsoft.IdentityModel

时间:2012-10-06 17:52:33

标签: asp.net-mvc wif

我遇到了ASP.NET MVC的问题Razor wiews使用来自Microsoft.IdentityModel命名空间的类/接口在设计和运行时模式中抱怨如下:

“名称空间'Microsoft'中不存在类型或命名空间名称'IdentityModel'    (你错过了一个程序集引用吗?)“

同样似乎在运行时也出现在HttpCompileException中。

如果从同一项目的控制器或视图模型中引用,则上述不是问题。

下面给出了代码示例(下面代码中的IdentityModel第2行在设计中以红色加下划线):

@using System.Security.Principal;
@using Microsoft.IdentityModel.Claims;

@model IPrincipal

@{
    ViewBag.Title = "Claims";
    Layout = null;
}



@if (Model is IClaimsPrincipal)
{
    IClaimsIdentity identity = Model.Identity as IClaimsIdentity;
    ...

上下文如下

  • asp.net 4.0 MVC Web应用程序
  • VS2010
  • WIF 3.5

我将Microsoft.IdentityModel.dll程序集(事先安装了WIF SDK)添加到我的asp.net mvc 4 Web项目中。

感谢

2 个答案:

答案 0 :(得分:0)

您可以在服务器(和您的开发人员电脑)上安装wif。有些人说可以二进制部署,但在我们的项目中我们无法做到这一点

答案 1 :(得分:0)

如果找不到命名空间,请按以下方式添加:

<add namespace="System.Security.Principal" />
<add namespace="Microsoft.IdentityModel.Claims" />

在views文件夹的web.config中找到它。

我找到了另一种可能的解决方案:

http://social.msdn.microsoft.com/Forums/en/wcf/thread/f7fbcd78-48a0-4877-af47-2f5a1af6cc14

  

要使Microsoft.IdentityModel.dll程序集正常工作,您必须这样做   确保项目的目标框架不是.NET Framework   客户资料。

     

项目 - &GT; ProjectName属性......

     

似乎VS2010默认使用此Target Framework。

另一个人:http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/97cb3c15-9253-4ff1-a690-b203a65c0dfd

重新引用他的dll并且它有效。 (不是原来的问题 - 再往下看)