ASP.NET Core 中的目录服务和帐户管理问题
Problems with Directory Services and Account Management in ASP.NET Core
我有一个 ASP.NET 核心 API 项目,我想使用 DirectoryServices 和 DirectoryServices.AccountManagement 命名空间。
经过一些研究,我认为我找到了一些 project.json 有用的参考资料:
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"EntityFramework.Commands": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel",
"ef": "EntityFramework.Commands"
},
"frameworks": {
"dnx451": {
"frameworkAssemblies": {
"System.DirectoryServices": "4.0.0.0",
"System.DirectoryServices.AccountManagement": "4.0.0.0"
}
},
"dnxcore50": { },
"net451": { }
},
"exclude": [
"wwwroot",
"node_modules"
],
"publishExclude": [
"**.user",
"**.vspscc"
]
}
添加这些后,使用这些引用中的 classes 的代码建议将命名空间添加到 class:
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
在那之后智能感知没有任何抱怨,一切看起来都很完美,但是如果我尝试构建或 运行 项目,我会收到 "type or namespace name 'DirectoryServices' does not exist in the namespace 'System'" 错误。
是否有资源可以帮助我了解如何在 ASP.Net 5 中实现 DirectoryServices 和 DirectoryServices.AccountManagement?
附带说明一下,我喜欢 ASP.NET Core,但似乎必须手动创建一个 json 文件作为参考,这与在 MVC 5 中添加参考相比是一个很大的退步。找到它们并选中复选框以添加它们。让我想知道是否没有我遗漏的东西可以为您生成该文件,而不是需要知道确切的字符并将它们粘贴到您自己中才能使事情正常进行。
在 ASP.NET Core(ASP.NET 5 和 vNext 的新名称几个月没有正式使用)中,一个项目将默认面向多个平台。
您已经添加了对 dnx451
框架名称的引用,它针对完整的 .NET 4.5 框架。
现在如果你使用
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
在 *.cs 文件中,它适用于 .NET 4.5,但不适用于 .NET Core,因为 .NET Core 没有对此 namespaces/assemblies 的引用。在构建时,总是会编译两个版本,这就是为什么会出现此错误。
你在Visual Studio编辑器中看不到它,因为它向你展示了.NET 4.5的代码(代码window上方是一个下拉菜单,你可以在其中切换目标框架)。
话虽如此,您有两个选择:
您只想定位 .NET 4.5
在这种情况下,您只需从 project.json 文件的框架部分删除 dnxcore50
名字对象(net451
也是因为它仅用于 class 库)。这将使您的项目成为仅针对完整 .NET 4.5 的 ASP.NET 核心项目。
您 want/need 以 .NET Core w/o 为目标,针对完整的 .NET 4.5 Framework
这个有点难。您要么需要替换 .NET Core 中的相同库。如果它使用相同的名称空间,只需将其引用添加到 dnxcore50
名字对象即可。
如果没有直接替换,您必须使用预处理器指令从 .NET Core 项目中删除这些代码部分。
#if DNX451
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
#endif
现在您的命名空间将仅在 .NET 4.5 目标中使用,而不会在 .NET Core 目标中使用。
旁注: 您可以删除 net451
绰号,因为它仅用于 Class 库(包),新项目类型为.NET Core 库编译成一个针对多个框架目标的包。有关更多信息,请参阅 RC1 announcement。
对于应用程序(ASP.NET 核心 Web 项目或 xUnit 项目)始终使用应用程序名称(分别为 dnx451
和 dnxcore50
)。对于 class 库,它是 net451
和 dotnet5.x
.
对于@Tseng 的回答,我想补充一点,目录服务计划用于 .NET Core 1.2。这是 GitHub 上的功能请求:https://github.com/dotnet/corefx/issues/2089。您可以在那里订阅并在那里发生事情时收到通知!
发布后,您可以在 ASP.NET Core 和 .NET Core 中使用目录服务!不过,考虑到 .NET Core 的当前状态和版本,这可能需要一些时间。
Microsoft 已在 asp.net 核心 2.0 中发布 System.DirectoryServices 的 pre-release 版本。您可以使用以下命令从 nuget 包管理器获取它:
Install-Package System.DirectoryServices -版本 4.5.0-preview1-25914-04
到目前为止,这对我来说工作正常。
我有一个 ASP.NET 核心 API 项目,我想使用 DirectoryServices 和 DirectoryServices.AccountManagement 命名空间。
经过一些研究,我认为我找到了一些 project.json 有用的参考资料:
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"EntityFramework.Commands": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel",
"ef": "EntityFramework.Commands"
},
"frameworks": {
"dnx451": {
"frameworkAssemblies": {
"System.DirectoryServices": "4.0.0.0",
"System.DirectoryServices.AccountManagement": "4.0.0.0"
}
},
"dnxcore50": { },
"net451": { }
},
"exclude": [
"wwwroot",
"node_modules"
],
"publishExclude": [
"**.user",
"**.vspscc"
]
}
添加这些后,使用这些引用中的 classes 的代码建议将命名空间添加到 class:
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
在那之后智能感知没有任何抱怨,一切看起来都很完美,但是如果我尝试构建或 运行 项目,我会收到 "type or namespace name 'DirectoryServices' does not exist in the namespace 'System'" 错误。
是否有资源可以帮助我了解如何在 ASP.Net 5 中实现 DirectoryServices 和 DirectoryServices.AccountManagement?
附带说明一下,我喜欢 ASP.NET Core,但似乎必须手动创建一个 json 文件作为参考,这与在 MVC 5 中添加参考相比是一个很大的退步。找到它们并选中复选框以添加它们。让我想知道是否没有我遗漏的东西可以为您生成该文件,而不是需要知道确切的字符并将它们粘贴到您自己中才能使事情正常进行。
在 ASP.NET Core(ASP.NET 5 和 vNext 的新名称几个月没有正式使用)中,一个项目将默认面向多个平台。
您已经添加了对 dnx451
框架名称的引用,它针对完整的 .NET 4.5 框架。
现在如果你使用
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
在 *.cs 文件中,它适用于 .NET 4.5,但不适用于 .NET Core,因为 .NET Core 没有对此 namespaces/assemblies 的引用。在构建时,总是会编译两个版本,这就是为什么会出现此错误。
你在Visual Studio编辑器中看不到它,因为它向你展示了.NET 4.5的代码(代码window上方是一个下拉菜单,你可以在其中切换目标框架)。
话虽如此,您有两个选择:
您只想定位 .NET 4.5
在这种情况下,您只需从 project.json 文件的框架部分删除
dnxcore50
名字对象(net451
也是因为它仅用于 class 库)。这将使您的项目成为仅针对完整 .NET 4.5 的 ASP.NET 核心项目。您 want/need 以 .NET Core w/o 为目标,针对完整的 .NET 4.5 Framework
这个有点难。您要么需要替换 .NET Core 中的相同库。如果它使用相同的名称空间,只需将其引用添加到
dnxcore50
名字对象即可。如果没有直接替换,您必须使用预处理器指令从 .NET Core 项目中删除这些代码部分。
#if DNX451 using System.DirectoryServices; using System.DirectoryServices.AccountManagement; #endif
现在您的命名空间将仅在 .NET 4.5 目标中使用,而不会在 .NET Core 目标中使用。
旁注: 您可以删除 net451
绰号,因为它仅用于 Class 库(包),新项目类型为.NET Core 库编译成一个针对多个框架目标的包。有关更多信息,请参阅 RC1 announcement。
对于应用程序(ASP.NET 核心 Web 项目或 xUnit 项目)始终使用应用程序名称(分别为 dnx451
和 dnxcore50
)。对于 class 库,它是 net451
和 dotnet5.x
.
对于@Tseng 的回答,我想补充一点,目录服务计划用于 .NET Core 1.2。这是 GitHub 上的功能请求:https://github.com/dotnet/corefx/issues/2089。您可以在那里订阅并在那里发生事情时收到通知!
发布后,您可以在 ASP.NET Core 和 .NET Core 中使用目录服务!不过,考虑到 .NET Core 的当前状态和版本,这可能需要一些时间。
Microsoft 已在 asp.net 核心 2.0 中发布 System.DirectoryServices 的 pre-release 版本。您可以使用以下命令从 nuget 包管理器获取它:
Install-Package System.DirectoryServices -版本 4.5.0-preview1-25914-04
到目前为止,这对我来说工作正常。