0

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

“命名空间‘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 项目中。

谢谢

4

2 回答 2

0

你可以在你的服务器(和你的开发者电脑)上安装 wif。有人说它可以二进制部署,但在我们的项目中我们做不到

于 2012-10-06T18:23:23.080 回答
0

如果找不到命名空间,请像这样添加:

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

在您的意见文件夹中的 web.config 中找到它。

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

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

为了使 Microsoft.IdentityModel.dll 程序集正常工作,您必须确保项目的目标框架不是 .NET Framework Client Profile。

项目-> 项目名称属性...

似乎 VS2010 默认使用此目标框架。

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

重新引用了他的 dll 并且它起作用了。(不是原来的问题 - 往下看)

于 2012-10-06T19:21:30.880 回答