如何使 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
进行以下更改
- 从最顶层节点
删除"version"
- 将以下属性添加到 complationOptions 对象:"debugType":"portable"
- 依赖项:将
AspNet
更改为 AspNetCore
- 依赖项:将所有
rc1-final
更改为 *
- 检查
MVC
和 MVC Tag Helpers
是否已从 6.0
重命名为 1.0
- 删除对
Application Insights
的所有依赖
- 删除
Microsoft.AspNet.Tooling.Razor
的所有依赖项
- 添加对
"Microsoft.NETCore.App": { "type": "platform", "version": "1.0.0-*" }
的依赖
- 添加新的内容对象:
"content": [ "wwwroot", "Views", "web.config", "appsettings.json" ]
- 更新所有 using 语句以引用
AspNetCore.*
而不是 AspNet.*
然后我将框架对象替换为:
"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 需要引用 net45
或 net451
而不是 dnx451
,但由于它来自 NuGet 提要,我无法更改它。
你知道我是否可以快速修复而不是等待 Kendo.MVC 的下一个版本吗?
你的方法很接近。做得好。有几个 changes/additions 要做。以下适用于 dotnet restore
然后 dotnet run
。 full code listing is on GitHub。
框架
您的 frameworks
失败,因为 ,因此您无法导入 net45
。您的错误表明 Kendo.Mvc
与 dnx451
和 dnxcore50
兼容;改为导入其中一个。然后为 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": {}
}
我有一个闪亮的新 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
- 从最顶层节点 删除"version"
- 将以下属性添加到 complationOptions 对象:"debugType":"portable"
- 依赖项:将
AspNet
更改为AspNetCore
- 依赖项:将所有
rc1-final
更改为*
- 检查
MVC
和MVC Tag Helpers
是否已从6.0
重命名为1.0
- 删除对
Application Insights
的所有依赖
- 删除
Microsoft.AspNet.Tooling.Razor
的所有依赖项
- 添加对
"Microsoft.NETCore.App": { "type": "platform", "version": "1.0.0-*" }
的依赖 - 添加新的内容对象:
"content": [ "wwwroot", "Views", "web.config", "appsettings.json" ]
- 更新所有 using 语句以引用
AspNetCore.*
而不是AspNet.*
- 更新所有 using 语句以引用
然后我将框架对象替换为:
"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 需要引用 net45
或 net451
而不是 dnx451
,但由于它来自 NuGet 提要,我无法更改它。
你知道我是否可以快速修复而不是等待 Kendo.MVC 的下一个版本吗?
你的方法很接近。做得好。有几个 changes/additions 要做。以下适用于 dotnet restore
然后 dotnet run
。 full code listing is on GitHub。
框架
您的 frameworks
失败,因为 net45
。您的错误表明 Kendo.Mvc
与 dnx451
和 dnxcore50
兼容;改为导入其中一个。然后为 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": {}
}