初尝 .NET 8 Preview 1
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初尝 .NET 8 Preview 1相关的知识,希望对你有一定的参考价值。
初尝 .NET 8 Preview 1
Intro
.NET 8 的第一个 preview 版本发布了,.NET 8 是新的 LTS 版本,有三年的长期支持,体验一下 .NET 8 preview 1 看看引入进来的变化
Install
Windows 上推荐使用 winget 进行安装,后续更新也会比较方便
使用 winget install Microsoft.DotNet.SDK.Preview
进行安装,使用 winget upgrade Microsoft.DotNet.SDK.Preview
进行更新
winget install Microsoft.DotNet.SDK.Preview
.NET 8 正式发布之后应该用
winget install Microsoft.DotNet.SDK.8
来安装
其他方式可以参考官网介绍:下载 .NET 8.0 (Linux、macOS 和 Windows) (microsoft.com)
CI
目前用的比较多的是 Github Actions 和 Azure Pipelines
Azure pipelines 比较简单和之前一致:
- task: UseDotNet@2
displayName: 'Use .NET sdk'
inputs:
packageType: sdk
version: 8.0.x
includePreviewVersions: true
把 version 改一下就可以了,Github actions 稍有不同,Github actions 如果使用 8.0.x
这种version 会失败,会找不到 package 不清楚 Azure pipeline 是不是做了什么特殊的处理,Github actions 需要指定具体的版本,如下所示:
- name: Setup .NET SDK
uses: actions/setup-dotnet@v3
with:
dotnet-version: |
6.0.x
7.0.x
8.0.100-preview.1.23115.2
失败的 CI 示例:https://github.com/WeihanLi/SparkTodo/actions/runs/4243107754/jobs/7375429465
后来发现别人也有遇到这个问题,用完整的 version 就可以了,可以参考 issue:.NET 8.0 Preview 1 · Issue #8213 · dotnet/core (github.com)
Docker image
.NET 8 对 docker 镜像做了较大的调整,我们一起看下吧
镜像 tag
首先镜像的 tag 变了,目前的策略是 RC 版本之前的 preview 版本对应的 image tag 都要加上 preview
,比如:8.0-preview
/8.0-preview-alpine
等
详细 tag 列表可以参考:
dotnet-docker/supported-tags.md at main · dotnet/dotnet-docker · GitHub
https://github.com/dotnet/dotnet-docker/blob/main/README.sdk.md#full-tag-listing
非 root 用户的支持
在之前的版本中,docker 镜像里只有一个 root 用户,从 8.0 开始引入了一个 app 的用户,有些 docker 镜像安全扫描工具会认为使用 root 用户是不安全的,从安全的角度来说这算是一个改进吧,如果使用非 root 用户
可以参考:
https://github.com/dotnet/dotnet-docker/blob/0f7ed9ce44b4aff3456b152b8cb4441c0617c120/src/runtime-deps/8.0/jammy/amd64/Dockerfile#L17
https://github.com/dotnet/dotnet-docker/blob/0f7ed9ce44b4aff3456b152b8cb4441c0617c120/src/runtime-deps/8.0/alpine3.17/amd64/Dockerfile#L14
ASP.NET Http port
从前面的截图可以看到有一个 ASPNETCORE_HTTP_PORTS
的环境变量,在 .NET 8 中我们只配一个端口就可以了,不用写那么长的 url 了,另外可以看到端口号是 8080,这对于 ASP.NET Core 应用来说需要格外注意的一个地方,默认的端口原来的 80 端口变成了 8080,因为 80 端口需要权限,app
用户没有 root 权限,如果需要使用 80 端口,仍需使用 root 用户并且在 Dockerfile 里配置端口为 80,如下所示:
ENV ASPNETCORE_HTTP_PORTS=80
如果想要使用 app
用户,则需要改外部的配置,容器的端口号从 80 改为 8080
USER app
More
之前做的一个小工具 dotnet-execute
也提供了 .NET 8 的支持,感兴趣的话可以用它来尝试一些新的 API,可以使用 dotnet tool update -g dotnet-execute --prerelease
来安装
调用 Random Shuffle API 示例
References
https://github.com/WeihanLi/SparkTodo
https://github.com/WeihanLi/dotnet-exec
dotnet-docker/supported-tags.md at main · dotnet/dotnet-docker · GitHub
https://github.com/dotnet/dotnet-docker/blob/main/README.sdk.md#full-tag-listing
https://github.com/dotnet/dotnet-docker/blob/0f7ed9ce44b4aff3456b152b8cb4441c0617c120/src/runtime-deps/8.0/jammy/amd64/Dockerfile#L17
https://github.com/dotnet/dotnet-docker/blob/0f7ed9ce44b4aff3456b152b8cb4441c0617c120/src/runtime-deps/8.0/alpine3.17/amd64/Dockerfile#L14
Announcing .NET 8 Preview 1 - .NET Blog (microsoft.com)
.NET 8.0 Preview 1 · Issue #8213 · dotnet/core (github.com)
以上是关于初尝 .NET 8 Preview 1的主要内容,如果未能解决你的问题,请参考以下文章