'DirectoryServices' 不存在于命名空间 'System' 中

'DirectoryServices' does not exist in the namespace 'System'

我正在尝试在 ASP.Net MVC (C#) 项目中使用 DirectoryEntry 并收到以下错误:

The type or namespace 'DirectoryServices' does not exist in the namespace 'System'.

我已将以下引用添加到我的项目中:

System
System.DirectoryServices

System.DirectoryServices 正在加载:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\System.DirectoryServices.dll

项目目标框架:.Net Framework 4.5.2

这似乎通常是一个简单的参考问题,但如上所述,参考应该在那里。有什么建议吗?

看起来您正在尝试从 System 命名空间加载 DirectoryEntry,就像您在代码中编写的一样:

System.DirectoryEntry entry = ...

而不是:

System.DirectoryServices.DirectoryEntry e = ...;

或者简单地说:

DirectoryEntry e = ...;

看来你在尝试

System.DirectoryEntry directoryEntry = ...

而是简单地使用

using System.DirectoryServices;

并尝试

DirectoryEntry directoryEntry = ...

或者你也可以试试

System.DirectoryServices.DirectoryEntry directoryEntry = ...

更新:

您正试图在 cshtml 页面中使用 DirectoryEntry。因此,您需要在项目的 Views 文件夹下的 web.config 文件中添加 System.DirectoryServices 的引用(它不是项目根目录中的主要 web.config 文件)

<system.web.webPages.razor>
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="System.Web.Mvc" />
      <add namespace="System.Web.Mvc.Ajax" />
      <add namespace="System.DirectoryServices" />
      ....
      <!-- etc -->
    </namespaces>
  </pages>
</system.web.webPages.razor>

阅读其他一些帖子后,我尝试将我的项目目标框架从“.Net Framework 4.5.2”切换到“.NET Framework 4.5”并解决了问题!似乎 System.DirectoryServices 已在 .Net Framework 4.5.2 中删除,这看起来很奇怪。也许它已被其他东西取代?

编辑:更改目标框架解决了问题,但在另一个 WS 上,我还能够在我的 'System.DirectoryServices' 参考中将 'Copy Local' 设置为 "True",这解决了问题。所以也许是那个 dll 不在 GAC 中的问题?无论如何,希望这些解决方案之一可以帮助 运行 遇到相同问题的人。

在你的Viewsweb.config中,除了添加命名空间外,你还必须显式添加程序集。仅仅添加到您的项目引用中似乎还不够。这是适合我的观点 web.config:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation>
      <assemblies>
        <add assembly="System.DirectoryServices.AccountManagement, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </assemblies>
    </compilation>
  </system.web>
  <system.web.webPages.razor>
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.DirectoryServices.AccountManagement" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
</configuration>

实际上,正确的方法是添加对 DirectoryServices 的引用。它与 .NET Framework 版本无关。

在解决方案资源管理器中右键单击您的项目,然后 select 添加 -> 引用,然后 select System.DirectoryServices。

它发生在 .csApp_code

之下

使用<add assembly="System.DirectoryServices.AccountManagement 可能会解决

在 .Net 5 安装以下 nuget 包 System.DirectoryServices