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

时间:2016-06-15 22:09:15

标签: asp.net .net asp.net-core .net-core .net-core-rc2

我认为我从根本上在这里遗漏了一些东西而且我提前为愚蠢而道歉。试图拥抱dotnet核心的新世界,并将项目作为一种尝试学习的方式。

我已经编写了一些身份验证中间件来使用ASP.NET Core Identity。我使用.NET核类库作为中间件 - 优点是我相信我可以针对任何框架以及构建我的组件的Nuget包。当与基于VS2015 RC2模板的.NET Core的ASP.NET Core Web应用程序一起使用时,中间件可以正常工作。

感觉冒险我决定基于OWIN / Katana身份验证中间件创建一个版本的组件,因此我可以将它与ASP.NET 4.5 / 6 Web应用程序一起使用。我没有创建传统的类库项目,而是再次使用了.NET Core Class Library模板,但仅针对.NET 4.6,即net46。它编译得很好,但我无法让我的ASP.NET 4.6应用程序引用它。我按照this SO question中的信息创建了一个NuGet包,创建了一个本地源,然后尝试将它添加到我的ASP.NET 4.6项目中,但它失败并出现错误:

  

无法解析依赖关系'NETStandard.Library'。使用的来源:'nuget.org','AspNetRc2Source','MyGet','本地','Microsoft和.NET','Microsoft Visual Studio离线包'。 0

我的脑子里充满了依赖性和框架。

无论如何这里是我的.NET Core类库中的project.json文件 - 你可以看到它只针对.NET 4.6,这也是我的ASP.NET应用程序所针对的目标。

.NET Core Library - Middleware Component

我觉得我需要一些严肃的.NET 101课程来了解所有这些依赖关系是如何组合在一起的,但如果有人能够指出我正确的方向,我们将不胜感激。

1 个答案:

答案 0 :(得分:7)

删除对NETStandard.Library的引用,它应该有效。如果您只针对.NET 4.5 +,则不需要。

我在一个可以从.NET 4.5+和.NET Core中使用的OWIN中间件库上工作。我使用看起来像这样的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生成可在两个平台上完美安装的库。