.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 

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

服务器数据恢复—热备盘上线过程中硬盘离线导致raid5阵列崩溃的数据恢复案例

服务器数据恢复环境&#xff1a; 两组分别由4块SAS接口硬盘组建的raid5阵列&#xff0c;两组raid5阵列划分LUN并由LVM管理&#xff0c;格式化为EXT3文件系统。 服务器故障&#xff1a; RAID5阵列中一块硬盘未知原因离线&#xff0c;热备盘自动激活上线替换离线硬盘。在热备盘上…

Mac上使用ln指令创建软链接、硬链接

在Mac、Linux和Unix系统中&#xff0c;软连接&#xff08;Symbolic Link&#xff09;和硬连接&#xff08;Hard Link&#xff09;是两种不同的文件链接方式。它们的主要区别如下&#xff1a; 区别&#xff1a; 硬连接&#xff1a; 不能跨文件系统。不能链接目录&#xff08;为…

PCIe学习笔记

PCIE高速串行数据总线 当拿到一块板子 比如你要用到PCIE 首先要看这块板子的原理图 一般原理图写的是 PCI express 表示PCIE 以下是Netfpga为例下的PCIE插口元件原理图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/01dc604fbdc847e8998a978c83c7b2eb.png 一般主…

Elasticsearch Kibana (windows版本) 安装和启动

目录 1.安装 2.启动 elasticsearch 3.启动 kibana 1.安装 elasticsearch下载&#xff0c;官网链接&#xff1a; Download Elasticsearch | Elastichttps://www.elastic.co/downloads/elasticsearch kibana下载&#xff0c;官网链接&#xff1a; Download Kibana Free | G…

linux下查看nginx的安装路径

一般会安装在默认位置下&#xff1a;/usr/local/openresty/nginx 或/usr/local/nginx 查看nginx运行进程&#xff0c;mast process 后面一般是nginx 的安装目录 ps -aux|grep nginx执行ls -l /proc/进程号/exe 会打印出安装/运行位置 ps -aux|grep nginx ls -l /proc/进程号/ex…

strongswan构建测试环境

make-testing脚本文件负责构建strongswan的虚拟化测试系统。位于目录strongswan-5.9.14/testing/&#xff0c;需要以管理员身份运行make-testing。生成测试用到的虚拟客户机镜像&#xff0c;KVM虚拟机和虚拟网络的配置文件位于目录:config/kvm。 ~/strongswan-5.9.14/testing$…

以太网链路详情

文章目录 1、交换机1、常见的概念1、冲突域2、广播域3、以太网卡1、以太网卡帧 4、mac地址1、mac地址表示2、mac地址分类3、mac地址转换为二进制 2、交换机的工作原理1、mac地址表2、交换机三种数据帧处理行为3、为什么会泛洪4、转发5、丢弃 3、mac表怎么获得4、同网段数据通信…

噪杂环境(房车改装市场)离线语音通断器模块

一直在坚持&#xff0c;却很难有机会上热门&#xff0c;在现在这个以流量为导向的时代&#xff0c;貌似很难靠所谓的坚守和热爱把产品成功的推向市场了。目前的客户仍然是以老客户为主&#xff0c;应用场景主要是房车改装&#xff0c;根据九客户的需求定制化一些模块。因为没有…

Android实现RecyclerView边缘渐变效果

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

操作系统(10)存储器的层次结构

前言 操作系统存储器的层次结构是一个复杂而有序的系统&#xff0c;它旨在提供不同速度、容量和成本的存储设备&#xff0c;以满足计算机系统中各种数据存取需求。 一、层次结构概述 操作系统存储器的层次结构通常包括多个层次&#xff0c;从高速到低速、从高成本到低成本排列。…

数据库中的代数运算

这些代数基本运算通常被封装在数据库查询语言中&#xff0c;如SQL中的SELECT、FROM、WHERE等子句&#xff0c;使得用户可以更方便地对数据库进行查询和处理。 下面的介绍基于以下两个关系来说明&#xff1a; 传统的集合运算 并&#xff08;∪&#xff09; 合并两个关系中的元组…

9_less教程 --[CSS预处理]

LESS&#xff08;Leaner Style Sheets&#xff09;是一种CSS预处理器&#xff0c;它扩展了CSS语言&#xff0c;增加了变量、嵌套规则、混合&#xff08;mixins&#xff09;、函数等功能&#xff0c;使得样式表的编写更加灵活和易于维护。下面是一些LESS的基础教程内容&#xff…

Vulhub:Fastjson[漏洞复现]

1.2.24-rce(CVE-2017-18349-Fastjson反序列化) 对于 Fastjson 来说&#xff0c;该漏洞的主要问题在于其1.2.24版本中autotype特性允许任意类的反序列化&#xff0c;因此攻击者通过type指定自定义类并实例化&#xff0c;在特定条件下调用这些类的公共方法。如果一个不受信任的 J…

【AI日记】24.12.13 kaggle 比赛 2-3 大扫除、断舍离、自己做饭

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加&#xff1a;kaggle 比赛 Regression with an Insurance Dataset参考&#xff1a;kaggle 回归类入门比赛 House Prices - Advanced Regression Techniques内容&#xff1a;构建自己的EDA&#xff08…

MIF格式详解,javascript加载导出 MIF文件示例

MIF 格式详解 MIF&#xff08;MapInfo Interchange Format&#xff09;是由Pitney Bowes Software开发的一种文本格式&#xff0c;用于存储地理空间数据。它通常与地图可视化和地理信息系统&#xff08;GIS&#xff09;相关联。MIF文件通常成对出现&#xff0c;一个.mif文件用…

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…

PyTorch基本使用-自动微分模块

学习目的&#xff1a;掌握自动微分模块的使用 训练神经网络时&#xff0c;最常用的算法就是反向传播。在该算法中&#xff0c;参数&#xff08;模型权重&#xff09;会根据损失函数关于对应参数的梯度进行调整。为了计算这些梯度&#xff0c;PyTorch 内置了名为 torch.autogra…

Oracle最佳实践-优化硬解析

前段时间参加oracle CAB&#xff0c;oracle高级服务部门做了一个数据库最佳实践的报告&#xff0c;其中就有一项就是解决未使用绑定变量但执行次数很多的SQL&#xff1b; 对于一个数据库来说如果不知道该如何优化&#xff0c;那么最简单最有效的优化就是减少硬解析&#xff0c;…

源码编译jdk11 超详细教程 openjdk11

关于源代码 当前的openJDK的源代码已经被发布到了github上了&#xff0c;所以我们可以直接从github上下载到。 OpenJDK11u源码托管地址&#xff1a;https://github.com/openjdk/jdk11u 带后缀U的地址&#xff0c;或者发行的jdk包&#xff0c;表示当前版本下的持续跟新版。而…

STL-vector类

目录 vector介绍及其使用 介绍 使用 vector定义 vector iterator vector内存管理 vector内容管理 vector的模拟实现 vector的迭代器失效 会引起迭代器失效的操作 vector介绍及其使用 介绍 向量是序列容器&#xff0c;表示大小可以变化的数组 见 chttps://cpluspl…