什么决定了加载哪个版本的 .NET Core SDK 库?



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

加载的程序集 'C:\程序 Files\dotnet\shared\Microsoft.NETCore.App\2.1.1\System.Private.CoreLib.dll'

dotnet —version 返回 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的有趣引用。

项目开发工具包是

<包引用包括 版本="2.1.0">

注册表中有对 2.1.1 SDK 的引用(其用途尚不清楚(。(这是我能看到的最好的竞争者,以及下面的dotnet信息主机(。

dotnet —info shows

主机(对支持有用(:
版本:2.1.1
提交:6985b9f684

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

毫不奇怪,大多数关于此的喋喋不休都建议从 v2.1.0 迁移到 2.1.1。 然而,知道正在发生的事情将是有启发性的。

由于历史原因,该项目在 2.1.0 上。 我们正在对一些.NET Framework依赖项采取一些自由,因此更改版本是一个需要注意的领域。 但是在我们不可避免地转向 2.1.3(或任何最新的(之前,最好挠一下这个痒。

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

类型"RazorViewAttribute"存在于两者中 'Microsoft.AspNetCore.Mvc.Razor, 版本=2.1.0.0, culture=neutral, PublicKeyToken=adb9793829ddae60' 和 'Microsoft.AspNetCore.Mvc.Razor, 版本=2.1.1.0,区域性=中性,公钥令牌=adb9793829ddae60'

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

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

最新更新