龙空技术网

升级到 .NET 8

opendotnet 478

前言:

而今我们对“aspnet35动态网站开发基础教程”大约比较看重,大家都想要知道一些“aspnet35动态网站开发基础教程”的相关内容。那么小编也在网摘上搜集了一些对于“aspnet35动态网站开发基础教程””的相关文章,希望我们能喜欢,咱们一起来了解一下吧!

Update to .NET 8Intro

.NET 8 正式版发布已有一周多了,有些应用已经升级了 .NET 8,有些有依赖 Roslyn 的 package,最近才更新,所以有部分刚升级,分享一下升级到 .NET 8 的过程,相对比较简单,仅供参考

TargetFramework Update

首先要更新的就是项目文件里的 TargetFramework 为 net8.0,然后 .NET 相关的 package 更新到 8.0.0 版本,对于某些非常简单的应用来说可能就足够了,完~

项目较多把 TargetFramework 可以放在一个 Directory.Build.props 中,移除项目文件里的,这样可能更新一行代码就可以了

再看些复杂一些的

.NET 8 SDK 默认包含了 source link,所以之前项目里引用了 Microsoft.SourceLink.GitHub 升级之后可以去掉了,SDK 里默认包含了,.NET 8 里默认支持 source link,无需做任何改动

默认支持

GitHub or GitHub EnterpriseAzure Repos git repositories (formerly known as Visual Studio Team Services)GitLab 12.0+ (for older versions see GitLab settings)Bitbucket 4.7+ (for older versions see Bitbucket settings)

可以参考:

另外从 .NET 8 开始默认的 dotnet pack 和 dotnet publish 会使用 Release 模式,而非之前的 Debug 模式,对于之前手动指定 -c Release 的命令可以简化一下,可以不用指定,不过不更新也不会有问题~~

CI Update

目前用的 CI 主要是 Azure DevOps 和 Github Actions

Azure DevOps

 - task: UseDotNet@2

displayName: 'Use .NET sdk'

inputs:

packageType: sdk

- version: 7.0.x

+ version: 8.0.x

更新 SDK version 到 8.0.x 或者 8.x 可以自动获取最近的 .NET 8 的 SDK

Github Actions

 - name: Setup .NET SDK

uses: actions/setup-dotnet@v3

with:

- dotnet-version: 7.0.x

+ dotnet-version: 8.0.x

如果你的项目是多个 target framework 的,常见的是一些类库应用,可能是增加了 .NET 8 的 sdk,可以同时指定多个版本,示例如下:

- name: Setup .NET SDK

uses: actions/setup-dotnet@v3

with:

dotnet-version: |

6.0.x

8.0.x

Container Update

更新 docker image tag 为 8.0

- FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base

+ FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base

+ ENV ASPNETCORE_HTTP_PORTS=80

- FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env

+ FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env

这里中间有一个 ASPNETCORE_HTTP_PORTS 环境变量的配置,因为 .NET 8 container 里默认的端口号变成了 8080,可以设置这一环境变量以保持使用 80 端口,这样可以不需要修改 k8s 里的 deployment 和 service 的端口配置

引入这一变化的原因在于,dotnet team 想要支持 non-root user,而 80 端口需要高级权限,所以默认端口号改成了 8080 普通用户也可以使用这一端口号,另外在 8.0 的 container 中引入了一个新的 user app 没有 root 权限

可以参考微软的 Dockerfile:

如果想要使用 8080 端口和 non-root user 的话,可以在 Dockerfile 中在 runtime image 中添加

USER app

即可启用 non-root user,需要注意的是如果启用 non-root user, 权限将会收紧,将无法在 container 里通过命令去安装新的 package

对于我们常用的一些工具如 curl 等如果需要建议在 Dockerfile 中增加一个 step 去安装

RUN apt-get update \

&& apt-get install -y --no-install-recommends \

curl \

git \

&& rm -rf /var/lib/apt/lists/*

USER app

另外就是前面提到的 container 的 port 变成了 8080,需要修改别的服务调用的地址或者 k8s resource 中 container port

如果是一个全新的服务,建议使用 8080 端口并且启用 app 用户,老的服务可以根据自己的需要进行调整

WPF Update

除了前面提到的框架版本和包版本的更新之外,在之前的版本中想要使用选择文件或者目录窗体的话在 WPF 中需要引用 Winform 的窗体,需要在项目文件中指定 <UseWindowsForms>true</UseWindowsForms> 并使用 System.Windows.Forms.FolderBrowserDialog 等

.NET 8 开始引入了 WPF 中的文件对话框,可以不再需要引用 winform 中的组件了

.NET 8 之前的代码如下:

var dialog = new System.Windows.Forms.FolderBrowserDialog

{

Description = _localizer["ChooseDirTip"],

ShowNewFolderButton = true

};

if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)

{

return dialog.SelectedPath;

}

更新到 .NET 8 之后的代码如下:

var dialog = new OpenFolderDialog()

{

Title = _localizer["ChooseDirTip"]

};

if (dialog.ShowDialog() == true)

{

return dialog.FolderName;

}

项目文件中的 <UseWindowsForms>true</UseWindowsForms> 也移除了,可以参考 commit:

More

你在升级 .NET 8 的过程中有没有遇到什么问题呢?一起来分享一下吧~~

References

标签: #aspnet35动态网站开发基础教程 #如何修改net的版本 #net如何升级 #net怎么升级 #aspnet弹出确定取消对话框