运行 测试时 .net sdk 和 .net core 不兼容

Incompatibility between .net sdk and .net core when running tests

我们使用 msbuild-sonar-scanner 图像对 .net 应用程序进行 运行 一些测试。

在构建 sonar-scanner 图像的 Dockerfile 中,在某个时候我们执行:

  && echo "deb http://download.mono-project.com/repo/debian stretch main" | tee /etc/apt/sources.list.d/mono-official.list \
    && curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg \
    && mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg \
    && sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch main" > /etc/apt/sources.list.d/dotnetdev.list' \
    && apt-get update \
    && apt-get install -y --no-install-recommends \
    dotnet-sdk-2.1.4 \

但是,测试执行产生以下错误

/usr/share/dotnet/sdk/2.1.4/Sdks/Microsoft.NET.Sdk/build/Microsoft.NET.TargetFrameworkInference.targets(135,5): error : The current .NET SDK does not support targeting .NET Core 2.1.  Either target .NET Core 2.0 or lower, or use a version of the .NET SDK that supports .NET Core 2.1. [/builds/enorasys-ss/essapi/src/socstreamsAPI/EssApi.csproj]

这怎么可能,因为我们使用 dotnet-sdk2.1.4 版本,因为这是 debian 存储库中可用的最新版本:

$ sudo apt-cache search dotnet  | grep dotnet-sdk
dotnet-sdk-2.0.0 - Microsoft .NET Core SDK - 2.0.0
dotnet-sdk-2.0.2 - Microsoft .NET Core SDK - 2.0.2
dotnet-sdk-2.0.3 - Microsoft .NET Core SDK - 2.0.3
dotnet-sdk-2.1 - Microsoft .NET Core SDK 2.1.401
dotnet-sdk-2.1.101 - Microsoft .NET Core SDK - 2.1.101
dotnet-sdk-2.1.103 - Microsoft .NET Core SDK - 2.1.103
dotnet-sdk-2.1.104 - Microsoft .NET Core SDK - 2.1.104
dotnet-sdk-2.1.105 - Microsoft .NET Core SDK - 2.1.105
dotnet-sdk-2.1.2 - Microsoft .NET Core SDK - 2.1.2
dotnet-sdk-2.1.200 - Microsoft .NET Core SDK - 2.1.200
dotnet-sdk-2.1.201 - Microsoft .NET Core SDK - 2.1.201
dotnet-sdk-2.1.202 - Microsoft .NET Core SDK - 2.1.202
dotnet-sdk-2.1.3 - Microsoft .NET Core SDK - 2.1.3
dotnet-sdk-2.1.300-preview2-008533 - Microsoft .NET Core SDK 2.1.300 - Preview
dotnet-sdk-2.1.300-rc1-008673 - Microsoft .NET Core SDK 2.1.300 - rc1
dotnet-sdk-2.1.4 - Microsoft .NET Core SDK - 2.1.4

TLDR:apt-get install dotnet-sdk-2.1.401,不是 dotnet-sdk-2.1.4

版本号不像十进制数字。例如,2.1.4 是比 2.1.300 低得多的版本。

您使用的是.NET Core 2.1.4 SDK,它实际上是一个旧版本,只支持.NET Core Runtime 2.0或更早版本。您想要使用 .NET Core 2.1.300 或更高版本(例如 2.1.301 或 2.1.400 或 2.1.401)。 2.1.300 之后的任何版本也可以针对 .NET Core Runtime 2.1。

.NET Core SDK 和运行时版本不以 "obvious" 的方式完全匹配。以下是我理解的版本:

  • .NET Core SDK 2.0 可以面向 .NET Core Runtime 2.0 或更早版本
  • .NET Core SDK 2.1.0 至 2.1.200 也仅针对 .NET Core Runtime 2.0 或更早版本
  • .NET Core SDK 2.1.300 及更高版本(包括 2.1.301、2.1.400 和 2.1.401)可以针对 .NET Core 2.1 以及旧版本。

您也可以在 https://www.microsoft.com/net/download/dotnet-core/2.1 which will show you all the SDK downloads that can target .NET Core runtime 2.1. The earliest version is 2.1.300 and the latest is 2.1.401. On the other hand, you can see the SDKs that can only target runtime 2.0 here: https://www.microsoft.com/net/download/dotnet-core/2.0 上看到这个。您可以看到 SDK 2.1.4 仅针对 Runtime 2.0。