无法在ASP.NET VB站点中加载System.DirectoryServices.AccountManagement

时间:2014-09-18 15:49:48

标签: asp.net .net vb.net directoryservices account-management

按照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?

2 个答案:

答案 0 :(得分:5)

虽然您要在标记中导入两个名称空间,但只引用System.DirectoryServices.dll。 AccountManagement部分位于单独的dll中。

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

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

答案 1 :(得分:5)

我按照Reg Edit的建议尝试了,但后来又出现了另一个错误,我的应用程序找不到web.config中描述的引用。几个小时后,我遇到了this 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下添加。

来自:Answer To: How do I get the full name of a user in .net MVC 3 intranet app?