dotnet 工具 - 无法找到任何兼容的框架版本 - 为什么我们需要 dotnet 的主要版本匹配?

dotnet tool - It was not possible to find any compatible framework version - why do we need a major version match of dotnet?

我正在尝试 运行 Azure Devops 构建代理中的 dotnet 工具 Swashbuckle.AspNetCore.Cli (5.6.3) .NET 5

这不起作用,我收到以下错误:

It was not possible to find any compatible framework version
The framework 'Microsoft.AspNetCore.App', version '3.0.0' was not found.
  - The following frameworks were found:
      5.0.9 at [/opt/hostedtoolcache/dotnet/shared/Microsoft.AspNetCore.App]

You can resolve the problem by installing the specified framework and/or SDK.

我看到确实没有 .NET 5 的 dll:

但我不明白。如果我安装了 .NET Core 3.0(或 3.1),该问题将得到解决,但这是为什么呢?我们不能 运行 在 .NET 5 运行 时代使用这样的工具吗?

.NET 5 是 .NET Core 3 的继承者,所以我预计 .NET Core 3 二进制文件可以被 .NET 5 使用。

PS:我知道 Swashbuckle.AspNetCore.Cli 6.x 有一个 .NET 5 dll,但我需要 Swashbuckle v5 行为并且我试图了解潜在的问题。

实际上,这只是部分正确 - 新 .net 核心框架(3.0.0、5.0.0)的每个主要版本都引入了多项重大更改。因此 运行times 仅在次要和补丁级别上相互兼容。

因此,如果您选择将可执行文件(如今的 .exe 或 .dll)定位到 .net 3.0,您可以 运行 在已安装的 3.1.03.0.2 运行 时间将被自动拾取。但是,如果你只安装了5.0,就会出现你写的错误。

此行为可通过 roll forwarding 属性 配置,您可以在项目级别指定:

<PropertyGroup>
  <RollForward>LatestMinor</RollForward>
</PropertyGroup>

您也可以将其指定为参数(您使用 cli 的情况)

dotnet myapp.dll --roll-forward LatestMinor

如果没有指定RollForward 属性,默认行为就是我上面描述的。但是,您可以尝试 LatestMajor,它应该选择安装时 运行 的最新主要版本(5.0),即使目标版本(3.0) 也可用。查看允许 RollForwardon MS documentation page

的完整列表