首页 > 解决方案 > 什么决定了加载哪个版本的 .NET Core SDK 库?

问题描述

我们的项目配置为使用 2.1.0 版的 asp.net core。但是,调试器显示正在加载 2.1.1 版本的 sdk 程序集。例如

加载程序集 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.1\System.Private.CoreLib.dll'</p>

dotnet —版本返回 2.1.300(根据 [ https://www.microsoft.com/net/download/dotnet-core/2.1]相当于 2.1.0 。

机器上最高版本的 SDK 是 C:\Program Files\dotnet\sdk\2.1.300。

dotnet/shared 目录在 Microsoft.AspNetCore.All、Microsoft.AspNetCore.App 和 Microsoft.NetCoreApp 下显示 2.1.0 和 2.1.1 的健康子目录。

项目中没有对字符串2.1.1的有趣引用。

项目SDK是

<PackageReference Include="Microsoft.AspNetCore.App" 版本="2.1.0">

注册表中有对 2.1.1 SDK 的引用(其目的不明确)。(这是我能看到的最佳竞争者以及下面的 dotnet info Host 的解释)。

dotnet —info shows

主机(用于支持):
版本:2.1.1
提交:6985b9f684

我想知道这是从哪里来的。

毫不奇怪,大多数关于此的讨论都建议从 v2.1.0 迁移到 2.1.1。但是,知道发生了什么会很有启发性。

由于历史原因,该项目在 2.1.0 上。我们对一些 .NET Framework 依赖项采取了一些自由,因此更改版本是一个需要注意的领域。但在我们不可避免地迁移到 2.1.3(或任何最新版本)之前,最好先解决这个问题。

这个问题不仅仅是学术问题。在服务器运行时修改剃须刀页面时会出现以下类型的错误。我假设/希望它与上述有关。这些页面由 Kestrel 直接提供服务。

'Microsoft.AspNetCore.Mvc.Razor, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' 和 'Microsoft.AspNetCore.Mvc.Razor, Version=2.1.1.0, Culture=neutral 中都存在“RazorViewAttribute”类型, PublicKeyToken=adb9793829ddae60'

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

解决方案


.NET Core 应用程序以两种模式之一运行,依赖于框架或自包含。您的应用程序在框架相关模式下运行,这意味着 .NET Core 的前滚策略将您的应用程序提升到 2.1.1,因为这是安装的最高 2.1.* 版本。请参阅https://docs.microsoft.com/en-us/dotnet/core/versions/selection#framework-dependent-apps-roll-forward

另外,我建议查看这篇博客文章,其中详细介绍了 PackageReference 到 Microsoft.AspNetCore.App 和它运行的共享框架之间的关系。https://natemcmaster.com/blog/2018/08/29/netcore-primitives-2/


推荐阅读