委托人不包含 'EmailAddress' 的定义

Principal does not contain a definition for 'EmailAddress'

我正在尝试通过 Windows 服务应用程序从 Windows 2016 服务上的 OU 检索用户(将帐户同步到另一项服务)。

我有下面的代码来搜索 OU,然后将结果添加到列表中。

List<string> UserList = new List<string>();

PrincipalContext context = new PrincipalContext(ContextType.Domain, domain, OU);
UserPrincipal userqbe = new UserPrincipal(context);
PrincipalSearcher searcher = new PrincipalSearcher(userqbe);

foreach (var found in searcher.FindAll())
{
    UserList.Add(found.EmailAddress);
}

我收到以下错误:

'Principal' does not contain a definition for 'EmailAddress' [...] (are you missing a using directive or assembly reference?)

在那次错误之后,我引用了所需的程序集:

并将它们包含在我的代码中:

using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;

关于用户原则class的microsoft documentation确实显示了EmailAddress属性。 DisplayName 等其他属性可以正常工作。

我在这里错过了什么?

在此处查看 FindAll 文档:https://docs.microsoft.com/en-us/dotnet/api/system.directoryservices.accountmanagement.principalsearcher.findall?view=dotnet-plat-ext-3.1#System_DirectoryServices_AccountManagement_PrincipalSearcher_FindAll

Returns

PrincipalSearchResult<Principal>

所以,只需投射你找到的对象

UserList.Add(((UserPrincipal)found).EmailAddress);

请注意,如果您不确定主体类型,这是很危险的。为避免任何运行时错误,您可以使用 Is 运算符 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/is