0

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

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

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 行为,我正在尝试了解根本问题。

4

1 回答 1

2

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

因此,如果您选择将可执行文件(现在的 .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 ) 也可用。请参阅MS 文档页面上RollForward允许值的完整列表

于 2021-08-30T21:32:48.703 回答