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

21

CS0234: 类型或命名空间名称“DirectoryServices”在命名空间“System”中不存在(是否缺少程序集引用?)

这个页面之前一直正常运行,可以从直接服务中显示记录且没有错误。但现在出现了上述错误。

 <asp:GridView ID="gvUsers" runat="server" AutoGenerateColumns="false" DataSourceID="odsUsers"
                                    AllowPaging="true" AllowSorting="true" Width="100%">
<Columns>
 <asp:TemplateField HeaderText="User Name">
 <ItemTemplate>

<%#((System.DirectoryServices.DirectoryEntry)Container.DataItem).Properties["userPrincipalName"].Value%>

   </ItemTemplate>
   </asp:TemplateField>
/Columns>
</asp:GridView>

项目构建成功,但当我打开页面时会出现错误。


当您打开页面时,这是在您构建项目的同一台机器上吗? - mservidio
4
ن½ وک¯هگ¦ه·²ه°†System.DirectoryServices程ه؛ڈ集و·»هٹ هˆ°ن½ çڑ„é،¹ç›®ن¸­ï¼ں - marc_s
1
@marc_s:是的,System.DirectoryServices程序集已经被添加了。我也尝试过将其删除并重新添加,但是出现了相同的错误。而且这个错误在其他机器上也出现了(不是开发服务器)。这个页面在过去很多天里一直都能正常工作。我在解决方案中添加了一些库项目,其中一个是Windows服务。 - Ali
@mservidio:是的,我正在构建项目的同一台机器上。 - Ali
1
当我为了测试目的从aspx页面中删除上述代码并在页面加载事件中添加下面一行代码时,它没有出现错误。"System.DirectoryServices.DirectoryEntry directoryEntry = new System.DirectoryServices.DirectoryEntry();" - Ali
System.DirectoryServices 在 cs 页面中显示在 intellisense 中,但在 aspx 页面中没有显示。其他类在 aspx 中成功地出现在 intellisense 中,但 System.DirectoryServices 没有。 - Ali
9个回答

43
在添加目录服务引用后,右键单击 reference 并进入 properties。将 "CopyLocal" 设为 true。

如果您没有看到您的文件夹“references”,请在“解决方案资源管理器”面板顶部搜索“显示所有文件”选项。 - Ed_

19

我非常确定我错误地将我的应用程序从开发计算机发布到IIS计算机。然而,我在这里找到了解决方法(链接),并且对我很有用。

如果您正在使用Web应用程序,则请在您的web.config文件中添加以下代码。

<compilation debug="true" targetFramework="4.0" >
    <assemblies>
        <add assembly="System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
        <add assembly="System.DirectoryServices.AccountManagement, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    </assemblies>
</compilation>

14

1 - 右键单击 "References" 鼠标按钮
2 - 单击 "添加引用 ..."
3 - 单击 "浏览" 按钮
4 - 在文件夹中找到以下文件:

"C:\Program Files\Reference\Assemblies\Microsoft\Framework\.NETFramework\v4.6.1"

-System.DirectoryServices.dll
-System.DirectoryServices.AccountManagement.dll

5 - 选择它们
6 - 按下 "OK" 按钮


1
现在你可以直接从列表中选择,而不必浏览。 - Arik
2020年,这仍然有效,尽管目录已更改为:C:\Program Files\Reference Assemblies\Microsoft\Framework\*version* - rpm192

3

对我而言,比较简单的方法是右击“引用” => “添加引用”,然后选择System.DirectoryServices(及所需的子程序集)。


2

我在使用Visual Studio 2015时遇到了一个问题,这个问题出现在一个MVC项目中,该项目的目标框架为.NET Framework 4.5.2。将目标框架更改为.NET 4.5可以解决这个问题。


1

您需要在您的asp.net页面上添加一个导入指令。确保它是完全限定的。同时确保您的项目中有对该程序集的引用。

 <%@ Assembly Name="System.DirectoryServices, Version=2.0.0.0,
     Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" %>

0

我曾经遇到同样的问题。在我的Windows文件夹中搜索DirectoryServices.dll,因为所有出现的版本大小都相同,所以我选择其中一个并将其复制到网站的bin文件夹中。如果您没有bin文件夹,只需创建即可。 这样做后,我能够打开我的网页而不出现错误。


0
如果在引用中添加“System.DirectoryServices.AccountManagement”程序集,它将正常工作。添加System.DirectoryServices将无法正常工作。

0

看起来你需要在项目中添加一个引用System.DirectoryServices。由于你在一个类似于aspx标记的页面中使用它,有时编译器会在“构建”期间让它们通过,但在实际执行页面时失败。


System.DirectoryServices程序集已经被添加,我将其删除并重新添加,但是仍然出现相同的错误。 - Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接