如何使 ASP.NET 核心 RC2 应用程序构建在具有较旧的第三方依赖项的 net46 框架上

How to make ASP.NET Core RC2 app build on net46 framework with older third party dependencies

我有一个闪亮的新 Asp.Net 核心 MVC 应用程序,它引用了一些较旧的 net45 库。

在完整的 net45 框架上与 Asp.Net Core RC1 一起正常工作。从 Asp.NET 核心 rc1 迁移到 rc2 我遇到了一个我不知道如何修复的障碍。

该应用程序是一个 ASP.NET 使用 EF6、Autofac、Kendo.MVC 的核心应用程序,它需要 运行 在完整的 .Net 4.6 框架上,因为有参考库使用WCF。

在从 rc1 迁移到 rc2 时,我首先将 NuGet.config 提要更新为指向 https://www.myget.org/F/aspnetcirelease/api/v3/index.json,然后对 project.json

进行以下更改

然后我将框架对象替换为:

"frameworks": {
  "netcoreapp1.0": {
    "imports": [
      "net45"
    ]
  }
}

我做了一个 dotnet restore,除 1 个包裹外,一切都解决了:

error: Package Kendo.Mvc 2016.1.412 is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package Kendo.Mvc 2016.1.412 supports:
error:   - dnx451 (DNX,Version=v4.5.1)
error:   - dnxcore50 (DNXCore,Version=v5.0)
error: One or more packages are incompatible with .NETCoreApp,Version=v1.0.
info : Committing restore...


Errors in project.json
    Package Kendo.Mvc 2016.1.412 is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package Kendo.Mvc 2016.1.412 supports:
      - dnx451 (DNX,Version=v4.5.1)
      - dnxcore50 (DNXCore,Version=v5.0)
    One or more packages are incompatible with .NETCoreApp,Version=v1.0.

因此,Kendo.MVC 需要引用 net45net451 而不是 dnx451,但由于它来自 NuGet 提要,我无法更改它。

你知道我是否可以快速修复而不是等待 Kendo.MVC 的下一个版本吗?

你的方法很接近。做得好。有几个 changes/additions 要做。以下适用于 dotnet restore 然后 dotnet runfull code listing is on GitHub

框架

您的 frameworks 失败,因为 ,因此您无法导入 net45。您的错误表明 Kendo.Mvcdnx451dnxcore50 兼容;改为导入其中一个。然后为 Kendo.Mvc 所依赖的一些包添加一个可移植的导入(如果你不这样做,你会看到告诉你这样做的构建错误。)

"frameworks": {
  "netcoreapp1.0": {
    "imports": [
      "dnxcore50",
      "portable-net45+win8+wp8"
    ]
  }
}

现在您的应用程序将恢复并构建。不过,它还不会 运行。

依赖关系

改变你对 Microsoft.NETCore.App 的依赖,不要 "type" : "platform"。否则你的应用程序将不会 运行 自己,因为 NuGet 会抑制包的资产。

"dependencies" : 
{
    // others omitted for clarity
    "Microsoft.NETCore.App": "1.0.0-*",
    "Kendo.Mvc": "*"
}

运行次

添加一个runtimes部分;我们现在在 project.json 中指定它,而不是依赖 dnvm

"runtimes": {
  "win8-x64": {}
}