我有一个针对.NET Standard 2.0的库。为了验证兼容性,我想使用 .NET Core 的当前版本和长期支持 (LTS) 版本运行单元测试。当写这个问题时,这些是:
目标框架 | 目标框架名称 (TFM) |
---|---|
.NET 5.0(当前) | 网络5.0 |
.NET Core 3.1(LTS) | netcoreapp3.1 |
.NET Core 2.1(LTS) | netcoreapp2.1 |
设置 csproj 文件以针对多个框架非常容易:
<PropertyGroup>
<TargetFrameworks>netcoreapp2.1;netcoreapp3.1;net5.0</TargetFrameworks>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
当安装了所有这些 SDK 后,这对于本地构建非常有效。但是,我更喜欢在单个轻量级 Docker 容器上进行 CI 构建。我不担心验证 .NET Framework 支持,因此我不需要 Windows。Docker Hub 上的.NET SDK 映像适用于任何单一框架(即mcr.microsoft.com/dotnet/sdk:5.0),但我想找到一个包含所有这三个 SDK 的 Docker 映像,而无需承担以下负担: “厨房水槽”图像,例如GitHub 托管的运行程序,其中包含许多不相关的框架和工具。
我可以编写自己的Dockerfile,从基本映像开始并编写额外 SDK 的安装脚本,但我肯定不是唯一可以使用此类内容的人。某个地方是否已经存在合适的 Docker 镜像?我是否应该采取不同的方法来解决这个问题,例如使用setup-dotnet或等效方法编写 SDK 安装脚本?
kay*_*tea 20
虽然最新的 dotnet SDK 可以针对任何以前的 SDK 版本,但dotnet test
需要特定的 dotnet 运行时。有很多方法可以将 dotnet sdk/runtimes 安装到基础 docker 映像中,但最简单的方法是从现有基础映像中复制 SDK 和/或运行时。以下是 dotnet 6 的示例,如果您需要 dotnet 5.0 运行时进行单元测试:
FROM mcr.microsoft.com/dotnet/sdk:6.0 as build
#uncomment if you need the 5.0 SDK also (unlikely):
#COPY --from=mcr.microsoft.com/dotnet/sdk:5.0 /usr/share/dotnet/sdk /usr/share/dotnet/sdk
# "install" the dotnet 5 runtime
COPY --from=mcr.microsoft.com/dotnet/sdk:5.0 /usr/share/dotnet/shared /usr/share/dotnet/shared
Run Code Online (Sandbox Code Playgroud)
如果运行上面的图像并进入 shell 并按dotnet --info
预期执行操作:
$ docker run -it --rm 0de6f2cdf814
root@b4bb146dcf7e:/src# dotnet --info
.NET SDK (reflecting any global.json):
Version: 6.0.200
Commit: 4c30de7899
Runtime Environment:
OS Name: debian
OS Version: 11
OS Platform: Linux
RID: debian.11-x64
Base Path: /usr/share/dotnet/sdk/6.0.200/
Host (useful for support):
Version: 6.0.2
Commit: 839cdfb0ec
.NET SDKs installed:
6.0.200 [/usr/share/dotnet/sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 5.0.10 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.2 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 5.0.10 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.2 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
To install additional .NET runtimes or SDKs:
https://aka.ms/dotnet-download
root@b4bb146dcf7e:/src#
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5095 次 |
最近记录: |