GroupPrincipal.getMembers() 的 UnsafeNativeMethods 异常

UnsafeNativeMethods exception with GroupPrincipal.getMembers()

我最近开始将我们的 .Net 4.6 Web 应用程序移植到 .Net Core 2.0,但在访问 System.DirectoryServices.AccountManagement

时遇到了一些问题

我想访问 GroupPrincipal.getMembers() 但一直收到 UnsafeNativeMethods 异常:

System.DirectoryServices.Interop.UnsafeNativeMethods+IAds.GetInfoEx(object vProperties, int lnReserved)
System.DirectoryServices.DirectoryEntry.RefreshCache(String[] propertyNames)
System.DirectoryServices.AccountManagement.RangeRetriever.GetNextChunk()
System.DirectoryServices.AccountManagement.RangeRetriever.MoveNext()
System.DirectoryServices.AccountManagement.ADDNLinkedAttrSet.GetNextEnum()
System.DirectoryServices.AccountManagement.ADDNLinkedAttrSet.MoveNextMemberEnum()
System.DirectoryServices.AccountManagement.ADDNLinkedAttrSet.MoveNext()
System.DirectoryServices.AccountManagement.FindResultEnumerator.MoveNext()
AspNetCore._Views_Groups_Show_cshtml+<ExecuteAsync>d__0.MoveNext() in Show.cshtml
+
    @foreach (var p in Model.GetMembers())
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

Show.cshtml中的代码:

@using System.DirectoryServices.AccountManagement
@model GroupPrincipal

@foreach (var p in Model.GetMembers())
{
  ...
}

异常: System.Exception: An operations error occurred.

已经尝试将代码从视图移到控制器中并用 unsafe 标记,但这也无济于事。

代码已经 运行 作为域管理员,可以访问所有用户等。只是方法调用不起作用。

正确的处理方法是什么?

好的,我好像找到了 solution/workaround:

我看到它处理了委托人,处理完就抛出异常。 所以我只是将主体放在另一个列表中并捕获了异常。

新列表包含所有主体,可以毫无问题地访问。

List<Principal> members = new List<Principal>();

try
{
    members.AddRange(group.GetMembers());
} 
catch (Exception)
{
    ; // do nothing
}

一定是 System.DirectoryServices.AccountManagement

的 .NET 核心实现中的错误