在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
如果我可以在.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
,我应该添加它吗?如果是的话从哪里来?
我在列表中看到了这个类(如果它与核心不兼容,该列表的目的是什么?
我还在that link
中找到有关该课程的信息我在错误的地方看?
答案 0 :(得分:12)
微软几周前发布了针对.NET Core的Windows兼容包,
通过分析System.Security.Principal.Windows.csproj
的源代码和添加它的提交,
我的结论是,它也是Windows唯一兼容库的一部分,因此只能在Windows上使用。
要将其添加到项目中,请打开csproj并手动为PackageReference
添加System.Security.Principal.Windows
标记(或使用Visual Studio的NuGet包管理器)。