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

时间:2018-09-05 08:30:53

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

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

  

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

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为

  

注册表中有对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直接提供。

  

两种类型中都存在'RazorViewAttribute'类型   'Microsoft.AspNetCore.Mvc.Razor,版本= 2.1.0.0,文化=中性,   PublicKeyToken = adb9793829ddae60”和“ Microsoft.AspNetCore.Mvc.Razor”,   版本= 2.1.1.0,文化=中性,PublicKeyToken = adb9793829ddae60'

1 个答案:

答案 0 :(得分:2)

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

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