尝试解决依赖关系:将 .NET 标准库更改为 NET Core - Microsoft.Extensions.Primitives

Trying to resolve dependencies: Changing .NET Standard Library to NET Core - Microsoft.Extensions.Primitives

我是 运行 Visual Studio 2015 更新 3。我正在尝试将 Redis 缓存用于 .Net 核心应用程序。因为,开发的包是针对 .Net 标准库的。我从 github 下载代码并尝试更改我自己的依赖项。

以下是项目:

首先,我尝试将抽象 Class 库更改为目标 .Net Core,然后我尝试添加 Microsoft.Extensions.Primitives,由于版本1不支持.NET Core。我添加了最终的预包:

Install-Package Microsoft.Extensions.Primitives -Version 1.0.0-rc1-final -Pre

无法解析,表示

The dependency Microsoft.Extensions.Primitives >= 1.0.0-rc1-final could not be resolved.

我如何修复它以使其适用于 .NET Core? .NET Core 1 与 .NET Core 5 有何不同,因为它们是我安装的包的依赖项?

为什么所有包都支持 .NET Standard Libary 而不是 .NET Core?

不知道你到底在做什么,但 rc1 引用似乎是错误的,现在 ASP.NET Core RTM 已经发布几个月了。

我抓取了 1.0.0 源代码(你必须专门选择 1.0.0 标签。Master 分支基于 ASP.NET Core 1.1)。

我唯一改变的是project.json(我卸载了除Microsoft.Extensions.Caching.Redis.Test之外的其他卸载的无关项目和测试项目。

这是我的 project.json(属于 Microsoft.Extensions.Caching.Redis):

{
  "version": "1.0.0",
  "description": "Distributed cache implementation of Microsoft.Extensions.Caching.Distributed.IDistributedCache using Redis.",
  "packOptions": {
    "repository": {
      "type": "git",
      "url": "https://github.com/aspnet/caching"
    },
    "tags": [
      "cache",
      "distributedcache",
      "redis"
    ]
  },
  "buildOptions": {
    "warningsAsErrors": true,
    "keyFile": "../../tools/Key.snk",
    "nowarn": [
      "CS1591"
    ],
    "xmlDoc": true
  },
  "dependencies": {
    "Microsoft.Extensions.Caching.Abstractions": "1.0.0",
    "Microsoft.Extensions.Options": "1.0.0",
    "StackExchange.Redis.StrongName": "1.1.608"
  },
  "frameworks": {
    "netstandard1.5": { },
    "net451": {
      "dependencies": { },
      "frameworkAssemblies": {
        "System.Runtime": {
          "type": "build"
        }
      }
    }
  }
}

Microsoft.Extensions.Caching.Abstractions 中不需要更改。

或者,您可以使用 StackExchange.Redis 而不是 StackExchange.Redis.StrongName,后者不是强命名(已签名)。不确定 so created/compiled 包是否会使用与其他包相同的密钥进行签名,这可能会在以后产生问题。如果您使用未签名的,那么它也可能会产生问题,如果您的应用程序本身是强命名的(或者您有业务要求所有程序集都是强签名的)。

此编译和单元测试通过,没有进一步测试。

至于你剩下的问题:

".NET Core 5" nuget 目标是 dnx50,一直用到 ASP.NET Core rc1。使用 rc2 ASP.NET 核心切换到 dotnet-cli,DNX 现在不受支持,不会收到任何进一步的更新。 rc2 引入了 netstandard 以简化 class 库的创建,这些库可以针对大多数可用平台(完整的 .NET Framework、.NET Core、WinRT/WindowsPhone/Windows8/Windows10、mono、Xamarin 等) .您可以了解有关 .NET Standard Library.

的更多信息