为什么WindowsIdentity类在.NET Core中不可见

Rev*_*ven 9 .net c# .net-core

在VisualStudio 2017 .NET Core 2.0控制台应用程序中具有以下代码

using System;
using System.Security.Principal;

namespace smallTests
{
    class Program
    {
        static void Main(string[] args)
        {
            var identity = WindowsIdentity.GetCurrent();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我收到错误:

The name 'WindowsIdentity' does not exist in the current context    
Run Code Online (Sandbox Code Playgroud)

如果我可以在.Net Core docs中的.NET Core 2.0库中看到这个类?

相同的代码适用于.NET控制台应用.

[编辑]

@Will @JohnnyL评论说我没有提及System.Security.Principal.Windows.dll,这是真的.

但我很好奇为什么它不起作用,因为在.NET 4.6.1项目中(类WindowsIdentity可见)我也没有System.Security.Principal.Windows.dll具体提到这一点.但是我引用了System.dll.

我一直认为它像命名空间层次结构一样工作.例如,当我提到

System.Security.Principal.dll

我可以使用里面的课程

System.Security.Principal.Windows.dll.

我错了吗?

System.Security.Principal.dll手动添加到.NetCore解决方案但它仍然无效.

[EDIT2]

@Will非常感谢你们很多关于它帮助我的主题.我试图弄明白是WindowsIdentity与Core兼容,看来请注意:

在声明区域的这个apisof.net中,我可以看到WindowsIdentity在,.Net Core 2.0 System.Security.Principal.Windows, Version=4.1.1.0, PublicKeyToken=b03f5f7f11d50a3a 但我没有System.Security.Principal.Windows.dll引用,我应该添加吗?如果是的话从哪里来?

.NET Core api参考中我在列表中看到这个类(如果它与核心不兼容,那个列表的目的是什么?

我还在该链接中找到有关该类的信息

我在错误的地方看?

Lex*_* Li 13

微软几周前发布了针对.NET Core的Windows兼容包,

https://blogs.msdn.microsoft.com/dotnet/2017/11/16/announcing-the-windows-compatibility-pack-for-net-core/

通过分析System.Security.Principal.Windows.csproj添加它的源代码和提交,

https://github.com/dotnet/corefx/blob/master/src/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj

我的结论是,这也是Windows唯一兼容库的一部分,因此只能在Windows上使用.

要将其添加到项目中,请打开csproj并手动添加PackageReference标记System.Security.Principal.Windows(或使用Visual Studio的NuGet包管理器).

  • "如果您正在构建Windows桌面应用程序,那么.NET Framework是您的最佳选择". (3认同)