.NET 9 已发布,您可以这样升级或更新

.NET 9 已经发布,您可能正在考虑更新您的 ASP.NET Core 应用程序。

我们将介绍更新应用程序所需的内容。从更新 Visual Studio 和下载 .NET SDK 到找出可能破坏应用程序的任何重大更改。

下载 .NET 9 SDK

这些是下载 .NET 9 SDK 所需的步骤。

更新 Visual Studio

如果您是 Windows 用户并使用 Visual Studio 2022,则需要将其更新至 17.12 或更高版本。为此,您可以转到“帮助”检查更新。如果有任何更新,它会提示您下载并安装它们。

将 Visual Studio 2022 社区版更新至 17.12.0

更新 Visual Studio 应该会自动安装 .NET 9 SDK,因此无需任何进一步的步骤。

Linux 和 Mac 用户

如果您是 Linux 或 Mac 用户,或者不使用 Visual Studio,则需要从 Microsoft 网站下载 .NET 9 SDK。

SDK 适用于 Windows、Linux 和 macOS。选择适合您操作系统的下载。

请记住下载 SDK 而不是 Runtime。Runtime 安装在运行应用程序的 Web 服务器上。

检查 .NET 9 SDK 是否已安装

此时,最好检查.NET 9 SDK 是否已成功安装在您的机器上。

在 PowerShell 窗口中,您可以键入以下命令行:

dotnet --list-sdks 

如果有以 9 开​​头的版本,则表示 .NET 9 SDK 已成功安装。这意味着我们可以更新我们的应用程序。 

将应用程序更新到 .NET 9

将您的应用程序更新到.NET 9 是一个简单的步骤。

在您的项目中,打开 .csproj文件并将属性更新TargetFrameworknet9.0。您需要对引用 ASP.NET Core 应用程序的任何项目执行此操作。

通过更新 .csproj 中的 TargetFramework 将 .NET 项目更新到 .NET 9

通过更新 .csproj 中的 TargetFramework 将 .NET 项目更新到 .NET 9

此外,如果您使用的是 .NET 8,则需要更新在版本 8 上运行的任何 Microsoft NuGet 包,或者与您正在使用的 .NET 版本相对应的任何版本。例如,如果您使用的是Microsoft.EntityFrameworkCoreNuGet 包,则需要将其更新到版本 9。

如果你是 Visual Studio 用户,最好的方法是转到工具管理解决方案的 NuGet 包。这将为你提供需要更新的所有 NuGet 包的列表。

如果您使用 Docker,则需要更新Dockerfile并将 SDK 和 Runtime 版本更改为9.0。 

更新 Dockerfile 以使用 .NET 9

重大变更

希望您的应用程序能够成功构建并运行。但如果没有,则可能是您的应用程序有一些需要解决的重大更改。

微软列出了 .NET 9 的所有重大变化。让我们重点介绍一下 .NET 9 中的一些关键变化。

FromKeyedServicesAttribute 不再注入非键控参数

如果您正在使用.NET 8 中引入的键控服务,则依赖注入中对它们的解析方式会发生变化。

在 .NET 8 中,如果您注入了一个未作为依赖注入的一部分注册的键控服务,但是您有一个具有相同接口的非键控服务,则该非键控服务将被解析。

在这个例子中,如果我们没有注册vipCustomerService为密钥服务,而是注册ICustomerService为非密钥服务,那么非密钥服务将得到解析。

public CustomerService([FromKeyedServices("vipCustomerService")] ICustomerService vipCustomerService ...) { }

但是在 .NET 9 中,行为已经改变,InvalidOperationException如果我们尝试解析尚未注册的键控服务,则总是会抛出一个。

HttpClientFactory 日志记录默认删除标头值

默认日志记录HttpClientFactory包括Trace输出所有请求和响应标头的级别日志。

通过包含RedactLoggedHeaders方法,您可以指定哪些是敏感的并从日志中删除。

services.AddHttpClient("MyEngine", ...) .RedactLoggedHeaders(h => h.StartsWith("X-"));

在 .NET 8 中,如果您不包含该RedactLoggedHeaders方法,则日志值将保持原样。

但是从 .NET 9 开始,如果您不包含该 RedactLoggedHeaders方法,则默认情况下将删除所有日志值。只有当您指定方法时,RedactLoggedHeaders未包含在其中的标头才会保持原样。

支持空环境变量

添加了支持,以便能够使用Environment.SetEnvironmentVariable键和值参数将环境变量设置为空字符串。

在 .NET 8 中,如果您使用SetEnvironmentVariable并将值参数指定为string.Emptynull,则会删除环境变量。如果您曾经将ProcessStartInfo.Environment环境变量的值设置为string.Emptynull,它会将其设置为空值。

但在 .NET 9 中,行为已经改变。将 中的值设置Environment.SetEnvironmentVariablestring.Empty将使其设置为空值。将其设置为null将删除环境变量。如果您使用ProcessStartInfo.Environment将变量的值设置为string.Empty,它将使其设置为空值。将其设置为null将删除环境变量。

您应该更新到.NET 9吗?

如果您的应用程序使用的是 .NET 7 或 .NET 6 以下的任何版本,那么您应该进行更新,因为这些版本不久前已经过期。这意味着它们不再受 Microsoft 支持。

在 .NET 9 发布的同一天,.NET 6 也终止了使用,这意味着它也不再受 Microsoft 支持。但你为什么要更新呢?

新功能

您可以利用后续 .NET 版本中包含的一些新功能。

在 .NET 9 中,支持 OpenAPI 以及新的 LINQ 表达式,例如 CountBy表达式。在此示例中,CountBy表达式用于列出每个姓氏的所有客户数量。

public record Customer(string Forename, string Surname);

public class MyClass
{
    List<Customer> customers =
    [
        new("Donald", "Trump"),
        new("Joe", "Biden"),
        new("Judd", "Trump")
    ];

    public Dictionary<string, int> GetCountForEachSurname()
    {
        var surnameCount = new Dictionary<string, int>();

        foreach (var s in customers.CountBy(p => p.Surname))
        {
            surnameCount.Add(s.Key, s.Value);
        }

        return surnameCount;
    }
}

通过更新到 .NET 9,您还可以利用 .NET 8 中的新功能,例如键控服务和新的全局处理异常中间件。

安全更新

您还可以利用较新 .NET 版本中提供的安全更新。Microsoft 经常发布针对拒绝服务漏洞的更新,以帮助防止 DDoS 攻击。DDoS 攻击会用虚假流量淹没您的应用程序,从而使您的应用程序运行非常缓慢,甚至无法供真实用户访问,因此您应该认真对待这一点。

长期支持(LTS)还是短期支持(STS)?

在本文发表时,.NET 8 和 .NET 9 是 Microsoft 支持的两个 .NET 版本。

.NET 8 于 2023 年 11 月发布,但有三年的支持,这意味着它将被支持到 2026 年 11 月。尽管 .NET 9 一年后发布,但它只有 18 个月的支持,这意味着它将在 .NET 8 之前六个月达到使用寿命。

版本发布日期终止日期支撑长度
.NET 8(LTS)2023 年 11 月 14 日2026 年 11 月 10 日3 年
.NET 9(STS)2024 年 11 月 12 日2026 年 5 月 12 日18个月

因此,是否更新到 .NET 8 或 .NET 9 确实取决于您的情况。如果您有一个大型项目,需要大量时间进行更新和测试,那么您可能值得坚持使用 .NET 8 提供的长期支持。但是,如果您有一个较小的项目,不需要很长时间进行更新,请随时升级到 .NET 9 并利用所提供的新功能。

部署应用程序

如果您使用 Azure YAML CI/CD 管道,则可能需要将 .NET 9 SDK 下载到 Azure 代理上。如果 .NET 9 刚刚发布,这一点尤其重要,因为 Azure 代理可能尚未安装 .NET 9 SDK。

您可以通过将此任务包含在 YAML 管道中来实现这一点:

- task: UseDotNet@2
  name: 'UseDotNet9SDK'
  displayName: '.NET 9 SDK install'
  inputs:
    packageType: sdk
    version: 9.x
    installationPath: $(Agent.ToolsDirectory)/dotnet

您还需要将服务器上安装的 ASP.NET Core 运行时版本更新为版本 9。如果您使用 IIS,请确保使用 Windows Hosting Bundle 安装程序。

下载 ASP.NET Core 运行时以获得 IIS 支持时,请选择“Windows 托管捆绑包”

参考原文:.NET 9 has been released and this is how you update 

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Iot】前端串口serialport.js串口通信库快速入门(附经验总结)

前端串口serialport.js串口通信库快速入门(附经验总结) 一、serialport简介1.1 安装1.2 基本用法1.3 完整示例代码二、问题2.1 数据包被拆分(已解决)2.2 串口返回的多种数据,如何区分类别(待解决)公司项目需要开发一个windows客户端,提供串口modbusRTU数据读取、处理、显…

前端报错npm ERR cb() never called问题

环境使用node版本v14.21.3&#xff0c;npm版本6.14.18 1.问题描述 1.1使用npm install后报错 npm ERR! cb() never called!npm ERR! This is an error with npm itself. Please report this error at: npm ERR! ? ? <https://npm.community>npm ERR! A complete log…

【下】王树森《小红书推荐系统公开课》- 课程笔记(特征交叉、行为序列、重排/推荐系统多样性、物品冷启动、涨指标的方法)

写在前面 本文为王树森老师《小红书推荐系统公开课》的课程笔记 课程来源&#xff1a;ShusenWang的个人空间-ShusenWang个人主页-哔哩哔哩视频 (bilibili.com)课程资料&#xff1a;GitHub - wangshusen/RecommenderSystem 由于篇幅较长&#xff0c;分为【上】【下】两篇文章…

[C++]C++工具之对异常情况的处理(throw、catch、try)以及用命名空间避免同名冲突

一、C 异常处理&#x1f60a; 1.1 定义 C 中的异常处理用于应对程序运行中的异常情况&#xff08;如除零、数组越界等&#xff09;&#xff0c;通过 try-catch 机制捕获和处理错误&#xff0c;防止程序崩溃。 异常是程序运行时意外发生的事件&#xff0c;可以通过抛出&#xf…

Dynamics 365 CRM- 后端

Dynamics 365 CRM 后端插件语法示例 public IPluginExecutionContext context null;//上下文 public IOrganizationServiceFactory serviceFactory null;//组织服务工厂对象 public IOrganizationService service null;//Org服务对象//创建执行上下文 context (IPluginExe…

C语言——实现并求出两个数的最大公约数

问题描述&#xff1a;求出两个数的最大公约数 //求两个数的最大公约数 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<time.h>int main() {int a,b;printf("请您输入两个数 a 和 b\n");scanf…

采用qL-MPC技术进行小型固定翼无人机的路径跟随控制

来自论文"Predictive Path-Following Control for Fixed-Wing UAVs Using the qLMPC Framework in the Presence of Wind Disturbances" 控制架构 采用的是 ULTRA-Extra无人机&#xff0c;相关参数如下&#xff1a; 这里用于guidance law的无人机运动学模型为&#…

三维无人机航迹算法的目标函数如何确定

一、定义目标函数 在三维无人机航迹算法中,目标函数的确定通常基于具体的任务需求和飞行约束。以下是一个简单的例子,展示了如何为三维无人机航迹规划定义一个目标函数。 例子:最小化飞行时间和避障的三维无人机航迹规划 1.任务描述:无人机需要从起点飞到终点,同时避开一些…

《Java核心技术I》Swing用户界面组件

Swing和模型-视图-控制器设计模式 用户界面组件各个组成部分&#xff0c;如按钮&#xff0c;复选框&#xff0c;文本框或复杂的树控件&#xff0c;每个组件都有三个特征&#xff1a; 内容&#xff0c;如按钮的状态&#xff0c;文本域中的文本。外观&#xff0c;颜色&#xff0c…

【Office】Office实现shift+鼠标滚轮左右滑动

Office实现shift鼠标滚轮左右滑动 windows系统安装office之后发现&#xff0c;使用shift鼠标滚轮不能够实现左右滑动&#xff0c;我记得以前的office好像是可以的&#xff0c;然后在网上找了一下&#xff0c;找到了一个插件可以实现这个功能 OfficeScroll插件 下载地址&…

vlan和vlanif

文章目录 1、为什么会有vlan的存在2、vlan(虚拟局域网)1、vlan原理1. 为什么这样划分了2、如何实现不同交换机相同的vlan实现互访呢3、最优化的解决方法&#xff0c;vlan不同交换机4、vlan标签和vlan数据帧 5、vlan实现2、基于vlan的划分方式1、基于接口的vlan划分方式2、基于m…

Web项目图片视频加载缓慢/首屏加载白屏

Web项目图片视频加载缓慢/首屏加载白屏 文章目录 Web项目图片视频加载缓慢/首屏加载白屏一、原因二、 解决方案2.1、 图片和视频的优化2.1.1、压缩图片或视频2.1.2、 选择合适的图片或视频格式2.1.3、 使用图片或视频 CDN 加速2.1.4、Nginx中开启gzip 三、压缩工具推荐 一、原因…

【CAN模块】介绍一种检查CAN模块芯片好坏的方法(SN65HVD230)

文章目录 前言一、以SN65HVD230为例介绍端口特性二、代码实现总结 前言 CAN总线收发器&#xff0c;是CAN控制器和物理总线间的接口器件&#xff0c;通常工程师会按照底层协议对其控制&#xff0c;近日笔者仔细了解了CAN总线收发器的物理原理&#xff0c;找到了一种通过观察端口…

RTMP推流平台EasyDSS在无人机推流直播安防监控中的创新应用

无人机与低空经济的关系密切&#xff0c;并且正在快速发展。2024年中国低空经济行业市场规模达到5800亿元&#xff0c;其中低空制造产业占整个低空经济产业的88%。预计未来五年复合增速将达到16.03%。 随着科技的飞速发展&#xff0c;公共安防关乎每一个市民的生命财产安全。在…

[win10] win10系统的下载及在虚拟机中详细安装过程(附有下载文件)

前言 win10 下载&#xff1a;https://pan.quark.cn/s/eb40e8ca57fb 提取码&#xff1a;VTZq 失效&#xff08;可能被官方和谐&#xff09;可评论或私信我重发 下载压缩包后解压 &#xff01;&#xff01;安装路径不要有中文 解压下载的.zip文件&#xff0c;得到.iso文件 打开…

lightRAG 论文阅读笔记

论文原文 https://arxiv.org/pdf/2410.05779v1 这里我先说一下自己的感受&#xff0c;这篇论文整体看下来&#xff0c;没有太多惊艳的地方。核心就是利用知识图谱&#xff0c;通过模型对文档抽取实体和关系。 然后基于此来构建查询。核心问题还是在解决知识之间的连接问题。 论…

[代码随想录17]二叉树之最大二叉树、合并二叉树、二搜索树中的搜索、验证二叉搜索树。

前言 二叉树的题目还是要会一流程构造函数之类的。其中还有回溯的思想 题目链接 654. 最大二叉树 - 力扣&#xff08;LeetCode&#xff09; 一、最大二叉树 思路&#xff1a;还是考察构造二叉树&#xff0c;简单来说就是给你一个数组去构建一个二叉树&#xff0c;递归来解决就…

Docker概述与基础入门

1. 什么是Docker&#xff1f; Docker 是一个开源的平台&#xff0c;用于自动化应用程序的构建、部署和管理。它允许开发人员通过将应用程序及其依赖项打包成容器镜像&#xff0c;从而确保应用可以在任何环境中一致地运行。Docker 容器是轻量级的、可移植的、且具有高度隔离性的…

C# 探险之旅:第三十六节 - 类型class之密封类Sealed Classes

嗨&#xff0c;探险家们&#xff01;欢迎再次搭乘我们的C#魔法列车&#xff0c;今天我们要去一个神秘又有点“傲娇”的地方——密封类&#xff08;Sealed Classes&#xff09;领地。系好安全带&#xff0c;咱们要深入“密封”的奇妙世界啦&#xff01; 什么是密封类&#xff1…

QTreeView 与 QTreeWidget 例子

1. 先举个例子 1班有3个学生&#xff1a;张三、李四、王五 4个学生属性&#xff1a;语文 数学 英语 性别。 语文 数学 英语使用QDoubleSpinBox* 编辑&#xff0c;范围为0到100,1位小数 性别使用QComboBox* 编辑&#xff0c;选项为&#xff1a;男、女 实现效果&#xff1a; 2…