【问题标题】:Problems with Directory Services and Account Management in ASP.NET CoreASP.NET Core 中的目录服务和帐户管理问题
【发布时间】:2016-03-16 23:27:06
【问题描述】:

我有一个 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 中添加引用相比是一大退步,您只需找到它们并选中要添加的框他们。让我想知道我是否缺少可以为您生成该文件的东西,而不是需要知道确切的字符并将它们粘贴到自己中以使事情正常进行。

【问题讨论】:

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


    【解决方案1】:

    在 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 文件的 frameworks 部分中删除 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

    【讨论】:

    • 很好的答案,谢谢。它起作用了,问题的原因现在对我来说更有意义了。
    • @Tseng 因此,如果我现在创建一个新的 ASP.NET Core 1.0 MVC6 webapp 并且需要 System.DirectoryServices.AccountManagement 之类的东西,但还需要整个 web 应用程序以 Core 1.0 为目标,这是否可行RC1 的时间?
    • @BlakeRivell:如果您至少有一个无法与 .NET Core 一起使用的依赖项,则必须将 ASP.NET Core 与完整的 .NET Framework(4.5、4.5.1、 4.5.2 或 4.6 - 或 linux 和 mac 上的单声道)或寻找适用于 .NET Core 的替代方案
    【解决方案2】:

    对于@Tseng 的分析器,我想补充一点,目录服务计划用于 .NET Core 1.2。这是 GitHub 上的功能请求:https://github.com/dotnet/corefx/issues/2089。您可以在那里订阅并在发生某些事情时收到通知!

    当它发布时,您可以将 ASP.NET Core 中的目录服务与 .NET Core 一起使用!不过,考虑到 .NET Core 的当前状态和版本,这可能需要一些时间。

    【讨论】:

      【解决方案3】:

      Microsoft 已在 asp.net core 2.0 中发布了 System.DirectoryServices 的预发布版本。您可以使用以下命令从 nuget 包管理器获取它:

      安装包 System.DirectoryServices -版本 4.5.0-preview1-25914-04

      到目前为止,这对我来说还不错。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-07
        • 2022-01-15
        • 2015-05-10
        • 2018-04-02
        • 2016-05-30
        • 1970-01-01
        相关资源
        最近更新 更多