在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控制台应用 .
[EDIT]
@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在_1286950中,但我没有引用 System.Security.Principal.Windows.dll
,我应该添加它吗?如果是的话从哪里来?
在.NET Core api reference我在列表中看到这个类(如果它与核心不兼容,该列表的目的是什么?
我也在that link找到有关该课程的信息
我在错误的地方看?
1 回答
微软几周前发布了针对.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并手动为
System.Security.Principal.Windows
添加PackageReference
标记(或使用Visual Studio的NuGet包管理器) .