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

news2024/12/16 15:40:34

.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.coloradmin.cn/o/2260578.html

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

相关文章

IMX6ULL开发板基础实验:Framebuffer驱动程序的简单应用实例代码详细分析

前言 这个代码之所以可以写得这么短&#xff0c;写得这么方便&#xff0c;原因在于LCD的驱动程序已经写好了&#xff0c;并且这个驱动程序符号Framebuffer的标准&#xff0c;这才使得我们在实现上层应用时变得很方便。 源代码&#xff1a; #include <sys/mman.h> #inc…

Jenkins:持续集成与持续部署的利器

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是Jenkins 2、Jenkins的起源 二、Jenkins的核心…

C语言基础14(动态内存控制后续)

文章目录 野指针、空指针、空悬指针野指针空指针空悬指针 void与void*的区别内存操作常用内存操作函数内存填充内存拷贝内存比较内存查找 野指针、空指针、空悬指针 野指针 定义&#xff1a;指向一块未知区域(已经销毁或者访问受限的内存区域外的已存在或不存在的内存区域)&a…

CSS在线格式化 - 加菲工具

CSS在线格式化 打开网站 加菲工具 选择“CSS在线格式化” 或者直接访问 https://www.orcc.online/tools/css 输入CSS代码&#xff0c;点击左上角的“格式化”按钮 得到格式化后的结果

分布式事物XA、BASE、TCC、SAGA、AT

分布式事务——Seata 一、Seata的架构&#xff1a; 1、什么是Seata&#xff1a; 它是一款分布式事务解决方案。官网查看&#xff1a;Seata 2.执行过程 在分布式事务中&#xff0c;会有一个入口方法去调用各个微服务&#xff0c;每一个微服务都有一个分支事务&#xff0c;因…

Serdes技术与Xilinx GT概览

目录 一、前言 二、Serdes技术 2.1 芯片间信号传输 2.2 Serdes技术 三、 Xilinx GT 3.1 7系列器件GT 3.2 Ultrascale GT 3.3 Ultrascale GT 四、参考资料 一、前言 对于芯片间高速信号传输技术&#xff0c;不得不提serdes以及在Xilinx在此基础上的高速收发器GT系列&…

HarmonyOS Next 元服务新建到上架全流程

HarmonyOS Next 元服务新建到上架全流程 接上篇 这篇文章的主要目的是介绍元服务从新建到上家的完整流程 在AGC平台上新建一个项目 链接 一个项目可以多个应用 AGC新建一个元服务应用 新建一个本地元服务项目 如果成功在AGC平台上新建过元服务&#xff0c;那么这里会自动显…

【Spark】Spark的两种核心Shuffle工作原理详解

如果觉得这篇文章对您有帮助&#xff0c;别忘了点赞、分享或关注哦&#xff01;您的一点小小支持&#xff0c;不仅能帮助更多人找到有价值的内容&#xff0c;还能鼓励我持续分享更多精彩的技术文章。感谢您的支持&#xff0c;让我们一起在技术的世界中不断进步&#xff01; Sp…

【CSS in Depth 2 精译_079】第 13 章:渐变、阴影与混合模式概述 + 13.1:CSS 渐变效果(一)——使用多个颜色节点

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点&#xff08;一&#xff09; ✔️13.1.2 颜色插值13.1.3 径向渐变13.1.4 锥形渐变 文…

Linux 中的 mkdir 命令:深入解析

在 Linux 系统中&#xff0c;mkdir 命令用于创建目录。它是文件系统管理中最基础的命令之一&#xff0c;广泛应用于日常操作和系统管理中。本文将深入探讨 mkdir 命令的功能、使用场景、高级技巧&#xff0c;并结合 GNU Coreutils 的源码进行详细分析。 1. mkdir 命令的基本用法…

mp4影像和m4a音频无损合成视频方法

第一步&#xff1a;复制高清视频地址 url 第二步:打开网址粘贴复制的视频url视频下载 第三步&#xff1a;下载-影像.mp4和-音频.m4a 第四步&#xff1a;合并视频&#xff1b; 使用ffmpeg进行无损合成&#xff08;如果没有安装ffmpeg请自行下载安装下载 FFmpeg (p2hp.com)&…

Leonardo.Ai丨一键生成图片(AI绘图)

随着人工智能技术的迅速发展,AI在各个领域的应用越来越广泛,特别是在图像生成方面。AI艺术创作的崛起,不仅让艺术创作变得更加便捷和创新,也为设计师、艺术家及普通用户提供了全新的工具。Leonardo.Ai作为一款基于人工智能的图像生成工具,通过简洁的操作和强大的功能,成功…

简单的Java小项目

学生选课系统 在控制台输入输出信息&#xff1a; 在eclipse上面的超级简单文件结构&#xff1a; Main.java package experiment_4;import java.util.*; import java.io.*;public class Main {public static List<Course> courseList new ArrayList<>();publi…

Android实现RecyclerView边缘渐变效果

Android实现RecyclerView边缘渐变效果 1.前言&#xff1a; 是指在RecyclerView中实现淡入淡出效果的边缘效果。通过这种效果&#xff0c;可以使RecyclerView的边缘在滚动时逐渐淡出或淡入&#xff0c;以提升用户体验。 2.Recyclerview属性&#xff1a; 2.1、requiresFading…

Avalonia的Ribbon

将以前Avalonia项目中的Ribbon单独隔离&#xff0c;提交到了github,方便大家查看修改。 Ribbon做成了组件&#xff0c;但是想要界面效果&#xff0c;还得结合窗体功能开发。 项目地址&#xff1a; jinyuttt/AvaloniaRibbonUI: AvaloniaRibbon component

Vue04

目录 一、学习目标 1.组件的三大组成部分&#xff08;结构/样式/逻辑&#xff09; 2.组件通信 3.综合案例&#xff1a;小黑记事本&#xff08;组件版&#xff09; 4.进阶语法 二、scoped解决样式冲突 1.默认情况&#xff1a; 三、data必须是一个函数 1、data为什么要写…

C# 探险之旅:第十八节 - 元组(Tuple):神奇的背包与丢弃的艺术,还有变身大法!

嘿&#xff0c;探险家们&#xff01;欢迎再次踏上C#的奇妙旅程。今天&#xff0c;我们要聊的是一个非常实用又有点懒散的旅行伴侣——元组&#xff08;Tuple&#xff09;。想象一下&#xff0c;你正准备来一场说走就走的旅行&#xff0c;但是不想带太多行李&#xff0c;只想简单…

SAP软件如何启用反记账功能

SAP软件和国内ERP软件不一样&#xff0c;它在录入会计凭证时是不可以录入负数的&#xff08;即红冲凭证&#xff09;&#xff0c;因此无法直接实现传统意义上的红字冲销。 比如&#xff0c;如下SAP正常和冲销业务产生会计凭证如下&#xff1a; 正常的业务凭证&#xff1a; 借…

若依-帝可得app后端

视频地址 https://www.bilibili.com/video/BV1pf421B71v?t=510.1 APP后端技术栈 架构解析 验证码功能 开发环境使用改的是固定的验证码 12345正式环境使用的是 阿里云的短信方案@Override public void sendSms(String mobile) {// String code = RandomUtil.randomNumbers(5);…

金融分析-Transformer模型(基础理论)

Transformer模型 1.基本原理 transformer的core是注意力机制&#xff0c;其本质就是编码器-解码器。他可以通过多个编码器进行编码&#xff0c;再把编码完的结果输出给解码器进行解码&#xff0c;然后得到最终的output。 1.1编码器 数据在编码器中会经过一个self-attention的…