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

无法在ASP.NET VB站点中加载System.DirectoryServices.AccountManagement,asp.net,.net,vb.net,directoryservices,account-management,Asp.net,.net,Vb.net,Directoryservices,Account Management,我一直在努力将Active Directory功能添加到已存在的ASP.NET网站,遵循Microsoft提供的以下指南:。这是一个漫长的过程,但我现在坚持的是无法访问AccountManagement类以使用某些函数,如“GetGroup()” 我可以访问DirectoryServices,但不能访问帐户管理。当我使用以下代码测试引用时: Response.Write(System.DirectoryServices.AccountManagement.Principal.GetGroups(

我一直在努力将Active Directory功能添加到已存在的ASP.NET网站,遵循Microsoft提供的以下指南:。这是一个漫长的过程,但我现在坚持的是无法访问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


我正在VS2010中编辑这个网站。我遗漏了什么?如何在此处添加AccountManagement?我是否没有正确导入它,或者是否可以在某个地方检查是否缺少.dll?

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

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

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

我按照Reg Edit的建议进行了尝试,但随后出现了另一个错误,我的应用程序无法找到web.config中描述的引用。几个小时后,我遇到了

它说对System.DirectoryServices.AccountManagement的引用应该在“True”上有“Copy local”。老实说,我看不出有什么理由这样做,因为这是一个框架库,但改变这个设置对我来说是可行的

您可以这样做:

使用(var context=newprincipalcontext(ContextType.Domain))
{
var principal=UserPrincipal.FindByIdentity(上下文、User.Identity.Name);
var firstName=principal.GivenName;
var lastName=主体。姓氏;
}
您需要添加对
System.DirectoryServices.AccountManagement
assembly

您可以添加剃须刀辅助对象,如下所示:

@helper AccountName()
{
使用(var context=newprincipalcontext(ContextType.Domain))
{
var principal=UserPrincipal.FindByIdentity(上下文、User.Identity.Name);
@principal.GivenName@principal.name
}
}
如果您决定从视图而不是控制器执行此操作, 您还需要向web.config添加程序集引用:

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

谢谢!我不认为可以在那里添加引用,但自从使用ASP.NET 4.0更新站点以来,我没有选中“添加引用…”选项。在触发此错误之前,代码行现在可以到达“GetGroups()”。BC30469:对非共享成员的引用需要对象引用。@justanotherguy,您正在调用
GetGroups()
,就好像它是一个静态方法一样(C#中的“static”与VB.Net中的“shared”意思相同)。但是,它是一个实例方法,因此在调用此方法之前需要一个主体对象。事实上,因为主体是抽象的,所以对象必须是(非抽象)子类的实例,例如UserPrincipal。然后GetGroups()将为您提供该用户所属的组。对于我来说,使用