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

C# 为什么WindowsIdentity类在.NET Core中不可见,c#,.net,.net-core,C#,.net,.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();

在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();
        }
    }
}
为什么会出现错误:

The name 'WindowsIdentity' does not exist in the current context    
如果我能在中的.NETCore2.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]

威尔非常感谢你解释这个问题,它对我帮助很大。 我试图弄清楚WindowsIdentity是否与Core兼容,似乎是这样,请参见:

在这个in Declarations区域中,我可以看到WindowsIdentity位于.Net Core 2.0 System.Security.Principal.Windows中,版本=4.1.1.0,PublicKeyToken=b03f5f7f11d50a3a 但是我在引用中没有
System.Security.Principal.Windows.dll
,我应该添加它吗?如果是,从哪里开始

在中,我在列表中看到了这个类(如果它与core不兼容,那么这个列表的目的是什么

我也在网上找到了关于这个班级的信息


我找错地方了吗?

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

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

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


要将其添加到项目中,请打开csproj并手动(或使用Visual Studio的NuGet Package Manager)为
System.Security.Principal.Windows添加
PackageReference
标记.WAG,但您可能没有引用System.Security.Principal.Windows.dll。在包含此类的程序集的文档中,有一个字符串
程序集:
lives@Will谢谢你的提示,请看我的编辑。4.6.1不是核心。完整框架WindowsIdentity中的IIRC存在于mscorlib中(选中,它存在).Core不引用与完整框架相同的程序集。类型在程序集中定义。如果类型A在程序集Foo.dll中,则必须引用Foo.dll才能使用A。您需要检查文档中所针对的框架(在您的情况下,.net Core)并检查给定类型在哪个程序集中定义。此信息有时也包含在“快速操作和重构”灯泡中…@我是否添加了Edit2“如果您正在构建Windows桌面应用程序,.NET Framework是您的最佳选择”@LexLi非常感谢您如此详细地解释这个主题。因此,页面上的浏览器确实显示了与.Net Core兼容的类和程序集。@Reven,是的。.Net API浏览器与GitHub代码库匹配。该部分显示了.Net Core是受支持的,但要找到要包含的NuGet包,您需要回滚到t他打开并阅读了“组装”部分。这远不是直观的,但现在没有更好的选择。进一步参考:如果重建没有帮助,请尝试重新启动VS。