.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
文件并将属性更新TargetFramework
为net9.0
。您需要对引用 ASP.NET Core 应用程序的任何项目执行此操作。
通过更新 .csproj 中的 TargetFramework 将 .NET 项目更新到 .NET 9
此外,如果您使用的是 .NET 8,则需要更新在版本 8 上运行的任何 Microsoft NuGet 包,或者与您正在使用的 .NET 版本相对应的任何版本。例如,如果您使用的是Microsoft.EntityFrameworkCore
NuGet 包,则需要将其更新到版本 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.Empty
或null
,则会删除环境变量。如果您曾经将ProcessStartInfo.Environment
环境变量的值设置为string.Empty
或null
,它会将其设置为空值。
但在 .NET 9 中,行为已经改变。将 中的值设置Environment.SetEnvironmentVariable
为string.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
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。