6

我一直致力于按照 Microsoft 的以下指南将 Active Directory 功能添加到现有的 ASP.NET 网站:http: //support.microsoft.com/kb/326340。这是一个漫长的过程,但我现在坚持的是无法访问 AccountManagement 类来使用某些功能,例如“GetGroup()”。

我可以很好地访问 DirectoryServices,但不能访问帐户管理。当我使用以下代码测试参考时:

Response.Write(System.DirectoryServices.AccountManagement.Principal.GetGroups())

我收到此错误:BC30456:“AccountManagement”不是“DirectoryServices”的成员。

我已经将此程序集标记添加到 web.config 页面:

<add assembly="System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />

另外我正在导入两个命名空间:

<%@ Import Namespace="System.DirectoryServices" %>
<%@ Import Namespace="System.DirectoryServices.AccountManagement" %>

这是我在错误页面上显示的版本信息:

版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.0.30319.34237

我正在 VS 2010 中编辑此网站。我缺少什么以及如何在此处添加 AccountManagement?我没有正确导入它,还是在某个地方我可以检查是否缺少 .dll?

4

2 回答 2

5

尽管您在标记中导入了两个命名空间,但您只引用了System.DirectoryServices.dll. AccountManagement 部分位于单独的 dll 中。

添加对 web.config 的另一个引用:

<add assembly="System.DirectoryServices.AccountManagement ...
于 2014-09-18T16:44:13.550 回答
5

我按照 Reg Edit 的建议进行了尝试,但后来出现另一个错误,我的应用程序找不到 web.config 中描述的参考。几个小时后,我遇到了这个 stackoverflow answer

它说对System.DirectoryServices.AccountManagement的引用应该在“ True ”上具有“复制本地” 。老实说,我认为没有理由这样做,因为那是一个框架库,但是更改该设置对我有用。

你可以这样做:

using (var context = new PrincipalContext(ContextType.Domain))
{
    var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
    var firstName = principal.GivenName;
    var lastName = principal.Surname;
}

您需要添加对 System.DirectoryServices.AccountManagement程序集的引用。

您可以像这样添加 Razor 助手:

@helper AccountName()
    {
        using (var context = new PrincipalContext(ContextType.Domain))
    {
        var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
        @principal.GivenName @principal.Surname
    }
}

如果您打算从视图而不是控制器执行此操作,则还需要向您的 web.config 添加程序集引用:

<add assembly="System.DirectoryServices.AccountManagement" />

将其添加到configuration/system.web/assemblies.

来自:回答:如何在 .net MVC 3 Intranet 应用程序中获取用户的全名?

于 2016-05-31T17:54:49.640 回答