在 ASP.NET 4.6 MVC 应用程序中引用 .NET Core 类库

3
我觉得我在这里基本上缺少了某些东西,我提前为我的愚蠢道歉。正在尝试拥抱新的dotnet core世界,并通过项目学习。我编写了一些身份验证中间件以适用于ASP.NET Core Identity。我使用了.NET Core类库来制作中间件 - 优势是我认为我可以潜在地针对任何框架并构建我的组件的Nuget包。当与面向.NET Core的ASP.NET Core Web应用程序一起使用时,中间件正常工作 - 基于VS2015 RC2模板。感到有冒险精神,我决定创建一个基于OWIN / Katana身份验证中间件的组件版本,以便我可以将其与ASP.NET 4.5/6 Web应用程序一起使用。我再次使用.NET Core类库模板而不是创建传统的类库项目,但仅将其定位于.NET 4.6,即net46。它可以编译,但我无法让我的ASP.NET 4.6应用程序引用它。我遵循this SO question中的信息来创建NuGet包,创建本地源,然后尝试将其添加到我的ASP.NET 4.6项目中,但它失败并出现错误:
无法解决依赖项“NETStandard.Library”。使用的源包括:“nuget.org”,“AspNetRc2Source”,“MyGet”,“Local”,“Microsoft and .NET”,“Microsoft Visual Studio Offline Packages”。 我的头晕了,因为有太多的依赖和框架。 无论如何,这是我的.NET Core类库中的project.json文件 - 你可以看到它只针对.NET 4.6,这也是我的ASP.NET应用程序所针对的。

.NET Core Library - Middleware Component

我觉得我需要一些严肃的.NET 101课程来理解所有这些依赖关系是如何相互配合的,但如果有人能够友好地指引我正确的方向,我将不胜感激。

“我的脑袋被依赖和框架搞晕了”……这不是事实吗?微软需要认真地撰写相关文档,让所有人都能明白这些东西。 - Tim Long
1个回答

7

移除对NETStandard.Library的引用,然后它就可以正常工作了。如果你只针对.NET 4.5+,那么你不需要它。

我在开发一个OWIN中间件库,可以在.NET 4.5+和.NET Core上使用。我使用以下project.json来同时针对两者进行开发:

"dependencies": {
  "Stormpath.Owin.Abstractions": {
    "target": "project",
    "version": "1.0.0"
  }
},
"frameworks": {
  "net45": {
    "frameworkAssemblies": {
      "System.Collections": "4.0.0.0"
    }
  },
  "netstandard1.3": {
    "dependencies": {
      "NETStandard.Library": "1.5.0-rc2-24027"
    }
  }
}

由于只有 .NET Core (netstandardX.Y) 需要 .NETStandard.Library,所以它只列为该目标的依赖项,而不是一般依赖项。该项目可以在 .NET 4.5 上成功编译,并且 dotnet pack 生成的库可在两个平台上完美安装。


1
谢谢,Nate - 这个修复了我的问题。我认为由于我基于VS2015模板创建了我的.NET Core类库,它假定我是针对.NET Core的目标,因此将其作为一般依赖项放入其中。我按照你建议的做法进行了编译,一切都很好 - 只是意味着我必须找出其他所需的依赖项,然后将它们明确地添加到目标框架中。感谢您的帮助。 - jcaddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接