asp.net-core - 什么决定了加载哪个版本的 .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'
解决方案
.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/
推荐阅读
- python - 如何使用单个 API 调用扫描 HappyBase 中的行集?
- python - 使用正则表达式从文本中提取嵌入字符串的句子
- react-native - React native:如何让多个抽屉导航器链接指向同一个堆栈导航器中的屏幕
- visual-studio - Linter 设置:导入时没有换行符,包括花括号
- python-3.x - 熊猫:按日期合并数据框中的两行但不包括其他行
- angular - 另一个角度内的http请求
- python - Dataframe python where条件考虑前行条件
- asp.net-core - 类库中 .NET Core 中的依赖注入
- javascript - 为什么我没有在 JS 中得到 console.log
- jenkins - Azure 管道 UI 接受参数(如 Jenkins)