【问题标题】:'DirectoryServices' does not exist in the namespace 'System'命名空间“系统”中不存在“目录服务”
【发布时间】:2023-09-18 02:01:01
【问题描述】:

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

命名空间“System”中不存在类型或命名空间“DirectoryServices”。

我在我的项目中添加了以下引用:

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

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

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4 directoryservices


    【解决方案1】:

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

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

    【讨论】:

    • 我今天在 VS2019 中创建了一个新的 ASP.NET WebForms 项目,目标是 .NET 4.6.1,并使用 DirectoryServices 从旧的 VS2017 项目中移植了一些代码,目标是 4.6.1,然后遇到了问题OP了。这个答案解决了它,而其他答案都没有。
    【解决方案2】:

    看来你在尝试

    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>
    

    【讨论】:

    • 其实我正在尝试:@using System.DirectoryServices;当我收到错误消息时。截图s22.postimg.org/3uwb84egh/…
    • 我真的试过了,还是一样的错误!我在 ~\Views\Web.config 中添加了您记下的参考。我开始怀疑这是否在 cshtml 视图中不起作用?也许它必须在控制器中?看起来很奇怪的行为。
    • @OtoNoOto 你能重新启动你的 Visual Studio 然后检查吗?
    • 最后将我的项目目标框架从“.Net Framework 4.5.2”切换到“.NET Framework 4.5”并解决了问题!赞成您的回复,因为我觉得它仍然有帮助,并且可能会解决其他人的问题。感谢您的回复。
    【解决方案3】:

    在您的 Views web.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>
    

    【讨论】:

    • 还要注意我的项目没有引用System.DirectoryServices,只有System.DirectoryServices.AccountManagement。该项目还针对 4.6.1。
    • 对于 System.DirectoryServices:
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      您似乎正在尝试从System 命名空间加载DirectoryEntry,就好像您已经在代码中编写了这个:

      System.DirectoryEntry entry = ...
      

      代替:

      System.DirectoryServices.DirectoryEntry e = ...;
      

      或者简单地说:

      DirectoryEntry e = ...;
      

      【讨论】:

      • 其实我正在尝试:@using System.DirectoryServices;当我收到错误消息时。截图s22.postimg.org/3uwb84egh/…
      • @OtoNoOto 所以您没有收到有关 DirectoryEntry 不存在于系统中的错误,正如您在问题中所写的那样?您只会收到有关 DirectoryServices 的错误消息?
      • @hvd 感谢您指出错误。我编辑了标题和帖子。
      【解决方案6】:

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

      编辑:更改目标框架解决了问题,但在另一个 WS 上,我还能够在我的“System.DirectoryServices”参考中将“复制本地”设置为“真”,从而解决了问题。那么也许是那个dll不在GAC中的问题?无论如何,如果遇到同样的问题,希望这些解决方案之一对某人有所帮助。

      【讨论】:

      • 'System.DirectoryServices' 引用中的'Copy Local' to "True" 对我也有帮助,但我需要在看到 .cshtml 文件中解析的引用之前重建项目。跨度>
      【解决方案7】:

      它发生在.csApp_code 之下的地方

      使用&lt;add assembly="System.DirectoryServices.AccountManagement 可以解决这个问题

      【讨论】:

        最近更新 更多