c# - ASP.NET Core 中的目录服务和帐户管理问题

标签 c# asp.net asp.net-core dnx directoryservices

我有一个 ASP.NET Core 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"
  ]
}

添加这些之后,使用这些引用中的类的代码会建议将命名空间添加到类中:

using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;

在那之后 intellisense 没有任何提示,一切看起来都很完美,但是如果我尝试构建或运行项目,我会收到“类型或命名空间名称‘DirectoryServices’在命名空间‘System’中不存在”错误。

有没有资源可以帮助我了解如何在 ASP.Net 5 中实现 DirectoryServices 和 DirectoryServices.AccountManagement?

附带说明一下,我喜欢 ASP.NET Core,但似乎必须手动为引用创建一个 json 文件与在 MVC 5 中添加引用相比是一个很大的退步,在 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 没有对此命名空间/程序集的引用。在构建时,总是会编译两个版本,这就是为什么会出现此错误。

您在 Visual Studio 编辑器中看不到它,因为它向您显示了 .NET 4.5 的代码(代码窗口上方是一个下拉菜单,您可以在其中在目标框架之间切换)。

话虽如此,您有两个选择:

  1. 您只想定位 .NET 4.5

    在这种情况下,您只需从 project.json 文件的框架部分删除 dnxcore50 名字对象(net451 也是因为它仅用于类库)。这会将您的项目变成一个仅针对完整的 .NET 4.5 的 ASP.NET Core 项目。

  2. 您希望/需要以 .NET Core 为目标,而不是针对完整的 .NET 4.5 框架

    这个有点难。您要么需要替换 .NET Core 中的相同库。如果它使用相同的命名空间,只需将其引用添加到 dnxcore50 名字对象即可。

    如果没有直接替换,您必须使用预处理器指令从 .NET Core 项目中删除这些代码部分。

    #if DNX451
    using System.DirectoryServices;
    using System.DirectoryServices.AccountManagement;
    #endif
    

现在您的命名空间将仅在 .NET 4.5 目标中使用,而不会在 .NET Core 目标中使用。

旁注:您可以删除 net451 名字对象,因为它仅用于类库(包),这是编译的 .NET Core 库的新项目类型成一个针对多个框架目标的包。请参阅 RC1 announcement更多。

对于应用程序(ASP.NET Core Web 项目或 xUnit 项目)始终使用应用程序名字对象(分别为 dnx451dnxcore50)。对于类库,它是 net451dotnet5.x

关于c# - ASP.NET Core 中的目录服务和帐户管理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36048910/

相关文章:

c# - 如何使用 C# 在 ASP.NET 中选择多个文件

c# - C# 中的电子邮件通知系统

c# - 如何在单独的线程上运行后台服务?

c# - Microsoft.AspNetCore.Mvc.WebApiCompatShim 中缺少 Request.GetQueryNameValuePairs()

c# - 如何从字节中获取子位作为单独的整数值?

javascript - WebSync Publish ClientId 变为零

c# - 通用类型的 ASP.NET MVC 显示模板

c# - Ninject 在 appharbor 上启动应用程序时崩溃

asp.net gridview 复选框选择

entity-framework - "No executable found matching command "点网 ef ""