重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
migrate-dotnet8-to-dotnet9 by dotnet/skills
npx skills add https://github.com/dotnet/skills --skill migrate-dotnet8-to-dotnet9将 .NET 8 项目或解决方案迁移到 .NET 9,系统性地解决所有破坏性变更。迁移结果是项目以 net9.0 为目标框架,能够干净地构建、通过测试,并已考虑到 .NET 9 版本中引入的每一项行为变更、源代码不兼容变更和二进制不兼容变更。
TargetFramework 从 net8.0 升级到 net9.0BinaryFormatter 的使用(现在在运行时总是会抛出异常)net9.0 为目标框架且能干净构建 — 迁移已完成。如果目标是升级到 net10.0,请使用 migrate-dotnet9-to-dotnet10 技能作为下一步。广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| 输入 | 是否必需 | 描述 |
|---|---|---|
| 项目或解决方案路径 | 是 | 要迁移的 .csproj、.sln 或 .slnx 入口点 |
| 构建命令 | 否 | 如何构建(例如 dotnet build、仓库构建脚本)。如果未提供则自动检测 |
| 测试命令 | 否 | 如何运行测试(例如 dotnet test)。如果未提供则自动检测 |
| 项目类型提示 | 否 | 项目是否使用 ASP.NET Core、EF Core、WinForms、WPF、容器等。如果未提供,则根据 PackageReferences 和 SDK 属性自动检测 |
直接根据已加载的参考文档回答。 不要搜索文件系统或从网页获取破坏性变更信息 — 参考文档包含权威的详细信息。专注于识别哪些破坏性变更适用并提供具体的修复方案。
提交策略: 在每个逻辑边界处提交 — 更新目标框架后(步骤 2)、解决构建错误后(步骤 3)、处理行为变更后(步骤 4)以及更新基础设施后(步骤 5)。这使每次提交都保持专注且易于审查。
.sln/.slnx 文件或单独的 .csproj 文件。dotnet --version 以确认已安装 .NET 9 SDK。如果未安装,请停止并通知用户。Microsoft.NET.Sdk.Web → ASP.NET Core;带有 <UseWPF> 或 <UseWindowsForms> 的 Microsoft.NET.Sdk.WindowsDesktop → WPF/WinFormsMicrosoft.EntityFrameworkCore.* → EF Core;Microsoft.Extensions.Http → HttpClientFactoryBinaryFormatter → 需要序列化迁移System.Text.Json → 序列化相关变更适用net8.0 目标进行一次干净构建(dotnet build --no-incremental 或删除 bin/obj),以建立一个干净的基线。记录任何预先存在的警告。在每个 .csproj 中(如果集中管理,则在 Directory.Build.props 中),将:
<TargetFramework>net8.0</TargetFramework>
更改为:
<TargetFramework>net9.0</TargetFramework>
对于多目标项目,将 net9.0 添加到 <TargetFrameworks> 或替换 net8.0。
将所有 Microsoft.Extensions.*、Microsoft.AspNetCore.*、Microsoft.EntityFrameworkCore.* 及其他 Microsoft 包引用更新到其 9.0.x 版本。如果使用集中包管理(Directory.Packages.props),请在那里更新版本。
运行 dotnet restore。注意:
net9.0 为目标框架(17.11 用于 net8.0 及更早版本)。运行一次干净构建。收集所有错误和新的警告。这些将在步骤 3 中解决。
系统性地处理编译错误和新的警告。根据项目类型加载相应的参考文档:
| 如果项目使用… | 加载参考文档 |
|---|---|
| 任何 .NET 9 项目 | references/csharp-compiler-dotnet8to9.md |
| 任何 .NET 9 项目 | references/core-libraries-dotnet8to9.md |
| 任何 .NET 9 项目 | references/sdk-msbuild-dotnet8to9.md |
| ASP.NET Core | references/aspnet-core-dotnet8to9.md |
| Entity Framework Core | references/efcore-dotnet8to9.md |
| 加密 API | references/cryptography-dotnet8to9.md |
| System.Text.Json、HttpClient、网络 | references/serialization-networking-dotnet8to9.md |
| Windows Forms 或 WPF | references/winforms-wpf-dotnet8to9.md |
| Docker 容器、原生互操作 | references/containers-interop-dotnet8to9.md |
| 运行时配置、部署 | references/deployment-runtime-dotnet8to9.md |
需要检查的常见源代码不兼容变更:
params span 重载解析 — String.Join、String.Concat、Path.Combine、Task.WhenAll 等许多方法上新的 params ReadOnlySpan<T> 重载现在会优先绑定。在 Expression lambda 内部调用这些方法的代码将失败(CS8640/CS9226)。参见 references/core-libraries-dotnet8to9.md。
StringValues 歧义重载 — params Span<T> 特性导致 String.Concat、String.Join、Path.Combine 等方法与 StringValues 隐式运算符产生歧义。通过显式转换参数来修复。参见 references/core-libraries-dotnet8to9.md。
新的过时警告(SYSLIB0054–SYSLIB0057):
SYSLIB0054:将 Thread.VolatileRead/VolatileWrite 替换为 Volatile.Read/Volatile.WriteSYSLIB0057:将 X509Certificate2/X509Certificate 的二进制/文件构造函数替换为 X509CertificateLoader 方法SYSLIB0055(ARM AdvSimd 有符号重载)和 (带哈希算法的 Assembly.LoadFrom)— 参见 C# 13 中 InlineArray 在记录结构体上 — 现在不允许在 record struct 类型上使用 [InlineArray] 属性(CS9259)。更改为常规 struct。参见 references/csharp-compiler-dotnet8to9.md。
C# 13 迭代器安全上下文 — 在 C# 13 中,迭代器现在引入一个安全上下文。迭代器内部从外部 unsafe 类继承并使用不安全代码的局部函数现在会报错。为局部函数添加 unsafe 修饰符。参见 references/csharp-compiler-dotnet8to9.md。
C# 13 集合表达式重载解析 — 空集合表达式([])不再使用 span 与非 span 来打破重载平局。现在优先选择确切的元素类型。参见 references/csharp-compiler-dotnet8to9.md。
String.Trim(params ReadOnlySpan<char>) 已移除 — 针对 .NET 9 预览版编译的、向 Trim/TrimStart/TrimEnd 传递 ReadOnlySpan<char> 的代码必须重新构建;该重载在 GA 版本中已被移除。参见 references/core-libraries-dotnet8to9.md。
BinaryFormatter 总是抛出异常 — 如果项目使用 BinaryFormatter,请停止并通知用户 — 这是一个重大决策。参见 references/serialization-networking-dotnet8to9.md。
HttpListenerRequest.UserAgent 可为空 — 该属性现在是 string?。添加空值检查。参见 references/serialization-networking-dotnet8to9.md。
Windows Forms 可空性注解变更 — 一些 WinForms API 参数从可为空更改为不可为空。更新调用站点。参见 references/winforms-wpf-dotnet8to9.md。
Windows Forms 安全分析器(WFO1000) — 新的分析器会对没有显式序列化配置的属性产生错误。参见 references/winforms-wpf-dotnet8to9.md。
每批修复后重新构建。重复此过程直到构建干净。
行为变更不会导致构建错误,但可能会改变运行时行为。审查每一项适用的变更,并确定项目是否依赖之前的行为。
高影响行为变更(优先检查):
浮点数到整数的转换现在采用饱和模式 — 从 float/double 到整数类型的转换现在在 x86/x64 上采用饱和模式,而不是环绕。参见 references/deployment-runtime-dotnet8to9.md。
EF Core:待处理模型更改异常 — 如果模型有待处理的更改,Migrate()/MigrateAsync() 现在会抛出异常。搜索任何 HasData 调用中的 DateTime.Now、DateTime.UtcNow 或 Guid.NewGuid() — 这些必须替换为固定常量(例如 new DateTime(2024, 1, 1, 0, 0, 0, DateTimeKind.Utc))。参见 references/efcore-dotnet8to9.md。
EF Core:显式事务异常 — 用户事务内部的 Migrate() 现在会抛出异常。参见 references/efcore-dotnet8to9.md。
HttpClientFactory 默认使用 SocketsHttpHandler — 将主处理程序强制转换为 HttpClientHandler 的代码将收到 InvalidCastException。参见 references/serialization-networking-dotnet8to9.md。
HttpClientFactory 默认启用标头编辑 — Trace 级别日志中的所有标头值现在都会被编辑。参见 references/serialization-networking-dotnet8to9.md。
环境变量优先于 runtimeconfig.json — 来自环境变量的运行时配置设置现在会覆盖 runtimeconfig.json。参见 references/deployment-runtime-dotnet8to9.md。
ASP.NET Core 开发环境中的 ValidateOnBuild/ValidateScopes — HostBuilder 现在在开发环境中默认启用 DI 验证。参见 references/aspnet-core-dotnet8to9.md。
需要审查的其他行为变更(可能导致运行时异常 ⚠️ 或细微的行为差异):
FromKeyedServicesAttribute 不再注入非键控服务回退 — 抛出 InvalidOperationExceptionBigInteger 现在最大长度为 (2^31) - 1 位JsonDocument 反序列化 JSON null 现在返回非空的 JsonDocument,其 JsonValueKind 为 Null,而不是 C# 的 nullSystem.Text.Json 元数据读取器现在对元数据属性名进行反转义ZipArchiveEntry 名称/注释现在遵循 UTF-8 标志IncrementingPollingCounter 初始回调现在是异步的InMemoryDirectoryInfo 将 rootDir 前置到文件路径RuntimeHelpers.GetSubArray 返回不同的类型PictureBox 引发 HttpRequestException 而不是 WebExceptionStatusStrip 使用不同的默认渲染器IMsoComponent 支持变为可选SafeEvpPKeyHandle.DuplicateHandle 增加句柄引用计数HttpClient 指标无条件报告 server.portdotnet watch 与旧框架的 Hot Reload 不兼容GetXmlNamespaceMaps 返回 Hashtable 而不是 StringDockerfiles:更新基础镜像。注意 .NET 9 容器镜像不再安装 zlib。如果你的应用依赖 zlib,请在你的 Dockerfile 中添加 RUN apt-get update && apt-get install -y zlib1g。
# 之前
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
FROM mcr.microsoft.com/dotnet/aspnet:8.0
# 之后
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
FROM mcr.microsoft.com/dotnet/aspnet:9.0
CI/CD 流水线:更新 SDK 版本引用。如果使用 global.json,请更新:
{
"sdk": {
"version": "9.0.100",
"rollForward": "latestFeature"
}
}
审查 rollForward 策略 — 如果设置为 "disable" 或 "latestPatch",升级后 SDK 可能无法正确解析。"latestFeature"(推荐)允许 SDK 滚动更新到最新的 9.0.x 功能带。
Visual Studio 版本:.NET 9 SDK 需要 VS 17.12+ 才能以 net9.0 为目标框架。VS 17.11 只能以 net8.0 及更早版本为目标框架。
终端记录器:dotnet build 现在在交互式终端中默认使用终端记录器。解析 MSBuild 控制台输出的 CI 脚本可能需要 --tl:off 或 MSBUILDTERMINALLOGGER=off。
dotnet workload 输出:输出格式已更改。更新任何解析 workload 命令输出的脚本。
.NET Monitor 镜像:标签简化为仅版本号(影响引用特定标签的容器编排)。
dotnet build --no-incrementaldotnet testreferences/ 文件夹包含按技术领域组织的详细破坏性变更信息。仅加载与正在迁移的项目相关的参考文档:
| 参考文件 | 何时加载 |
|---|---|
references/csharp-compiler-dotnet8to9.md | 总是(C# 13 编译器破坏性变更 — 记录结构体上的 InlineArray、迭代器安全上下文、集合表达式重载) |
references/core-libraries-dotnet8to9.md | 总是(适用于所有 .NET 9 项目) |
references/sdk-msbuild-dotnet8to9.md | 总是(SDK 和构建工具变更) |
references/aspnet-core-dotnet8to9.md | 项目使用 ASP.NET Core |
references/efcore-dotnet8to9.md | 项目使用 Entity Framework Core |
references/cryptography-dotnet8to9.md | 项目使用 System.Security.Cryptography 或 X.509 证书 |
references/serialization-networking-dotnet8to9.md | 项目使用 BinaryFormatter、System.Text.Json、HttpClient 或网络 API |
references/winforms-wpf-dotnet8to9.md | 项目使用 Windows Forms 或 WPF |
references/containers-interop-dotnet8to9.md | 项目使用 Docker 容器或原生互操作(P/Invoke) |
references/deployment-runtime-dotnet8to9.md | 项目使用运行时配置、部署,或涉及浮点数到整数的转换 |
每周安装次数
50
代码仓库
GitHub 星标数
725
首次出现
2026年3月12日
安全审计
安装于
github-copilot45
opencode45
kimi-cli43
gemini-cli43
amp43
cline43
Migrate a .NET 8 project or solution to .NET 9, systematically resolving all breaking changes. The outcome is a project targeting net9.0 that builds cleanly, passes tests, and accounts for every behavioral, source-incompatible, and binary-incompatible change introduced in the .NET 9 release.
TargetFramework from net8.0 to net9.0BinaryFormatter usage (now always throws at runtime)net9.0 and builds cleanly — migration is done. If the goal is to reach net10.0, use the migrate-dotnet9-to-dotnet10 skill as the next step.| Input | Required | Description |
|---|---|---|
| Project or solution path | Yes | The .csproj, .sln, or .slnx entry point to migrate |
| Build command | No | How to build (e.g., dotnet build, a repo build script). Auto-detect if not provided |
| Test command | No | How to run tests (e.g., dotnet test). Auto-detect if not provided |
| Project type hints | No | Whether the project uses ASP.NET Core, EF Core, WinForms, WPF, containers, etc. Auto-detect from PackageReferences and SDK attributes if not provided |
Answer directly from the loaded reference documents. Do not search the filesystem or fetch web pages for breaking change information — the references contain the authoritative details. Focus on identifying which breaking changes apply and providing concrete fixes.
Commit strategy: Commit at each logical boundary — after updating the TFM (Step 2), after resolving build errors (Step 3), after addressing behavioral changes (Step 4), and after updating infrastructure (Step 5). This keeps each commit focused and reviewable.
.sln/.slnx files, or individual .csproj files.dotnet --version to confirm the .NET 9 SDK is installed. If it is not, stop and inform the user.Microsoft.NET.Sdk.Web → ASP.NET Core; Microsoft.NET.Sdk.WindowsDesktop with <UseWPF> or <UseWindowsForms> → WPF/WinFormsMicrosoft.EntityFrameworkCore.* → EF Core; → HttpClientFactoryIn each .csproj (or Directory.Build.props if centralized), change:
<TargetFramework>net8.0</TargetFramework>
to:
<TargetFramework>net9.0</TargetFramework>
For multi-targeted projects, add net9.0 to <TargetFrameworks> or replace net8.0.
Update all Microsoft.Extensions.*, Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, and other Microsoft package references to their 9.0.x versions. If using Central Package Management (Directory.Packages.props), update versions there.
Run dotnet restore. Watch for:
net9.0 (17.11 for net8.0 and earlier).Run a clean build. Collect all errors and new warnings. These will be addressed in Step 3.
Work through compilation errors and new warnings systematically. Load the appropriate reference documents based on the project type:
| If the project uses… | Load reference |
|---|---|
| Any .NET 9 project | references/csharp-compiler-dotnet8to9.md |
| Any .NET 9 project | references/core-libraries-dotnet8to9.md |
| Any .NET 9 project | references/sdk-msbuild-dotnet8to9.md |
| ASP.NET Core | references/aspnet-core-dotnet8to9.md |
| Entity Framework Core | references/efcore-dotnet8to9.md |
| Cryptography APIs | references/cryptography-dotnet8to9.md |
Common source-incompatible changes to check for:
params span overload resolution — New params ReadOnlySpan<T> overloads on String.Join, String.Concat, Path.Combine, Task.WhenAll, and many more now bind preferentially. Code calling these methods inside Expression lambdas will fail (CS8640/CS9226). See references/core-libraries-dotnet8to9.md.
StringValues ambiguous overload — The params Span<T> feature creates ambiguity with implicit operators on methods like , , . Fix by explicitly casting arguments. See .
Build again after each batch of fixes. Repeat until the build is clean.
Behavioral changes do not cause build errors but may change runtime behavior. Review each applicable item and determine whether the previous behavior was relied upon.
High-impact behavioral changes (check first):
Floating-point to integer conversions are now saturating — Conversions from float/double to integer types now saturate instead of wrapping on x86/x64. See references/deployment-runtime-dotnet8to9.md.
EF Core: Pending model changes exception — Migrate()/MigrateAsync() now throws if the model has pending changes. Search forDateTime.Now, DateTime.UtcNow, or Guid.NewGuid() in any HasData call — these must be replaced with fixed constants (e.g., ). See .
Other behavioral changes to review (may cause runtime exceptions ⚠️ or subtle behavioral differences):
FromKeyedServicesAttribute no longer injects non-keyed service fallback — throws InvalidOperationExceptionBigInteger now has a maximum length of (2^31) - 1 bitsJsonDocument deserialization of JSON null now returns non-null JsonDocument with JsonValueKind.Null instead of C# nullSystem.Text.Json metadata reader now unescapes metadata property namesDockerfiles : Update base images. Note that .NET 9 container images no longer install zlib. If your app depends on zlib, add RUN apt-get update && apt-get install -y zlib1g to your Dockerfile.
# Before
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
FROM mcr.microsoft.com/dotnet/aspnet:8.0
# After
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
FROM mcr.microsoft.com/dotnet/aspnet:9.0
CI/CD pipelines : Update SDK version references. If using global.json, update:
{
"sdk": {
"version": "9.0.100",
"rollForward": "latestFeature"
}
}
Review the rollForward policy — if set to "disable" or "latestPatch", the SDK may not resolve correctly after upgrading. "latestFeature" (recommended) allows the SDK to roll forward to the latest 9.0.x feature band.
Visual Studio version : .NET 9 SDK requires VS 17.12+ to target net9.0. VS 17.11 can only target net8.0 and earlier.
Terminal Logger : dotnet build now uses Terminal Logger by default in interactive terminals. CI scripts that parse MSBuild console output may need --tl:off or MSBUILDTERMINALLOGGER=off.
dotnet workload output: Output format has changed. Update any scripts that parse workload command output.
.NET Monitor images : Tags simplified to version-only (affects container orchestration referencing specific tags).
dotnet build --no-incrementaldotnet testThe references/ folder contains detailed breaking change information organized by technology area. Load only the references relevant to the project being migrated:
| Reference file | When to load |
|---|---|
references/csharp-compiler-dotnet8to9.md | Always (C# 13 compiler breaking changes — InlineArray on records, iterator safe context, collection expression overloads) |
references/core-libraries-dotnet8to9.md | Always (applies to all .NET 9 projects) |
references/sdk-msbuild-dotnet8to9.md | Always (SDK and build tooling changes) |
references/aspnet-core-dotnet8to9.md | Project uses ASP.NET Core |
references/efcore-dotnet8to9.md | Project uses Entity Framework Core |
Weekly Installs
50
Repository
GitHub Stars
725
First Seen
Mar 12, 2026
Security Audits
Gen Agent Trust HubPassSocketFailSnykPass
Installed on
github-copilot45
opencode45
kimi-cli43
gemini-cli43
amp43
cline43
Azure Pipelines 本地验证与构建管理指南 - VS Code 开发工作流优化
526 周安装
Laravel架构模式指南:生产级开发模式与最佳实践
1,400 周安装
Kotlin Exposed ORM 模式指南:DSL查询、DAO、事务管理与生产配置
1,300 周安装
免费AI数据抓取智能体:自动化收集、丰富与存储网站/API数据
1,300 周安装
crypto-report:加密货币AI分析报告与区块链新闻更新工具 | 币安BTC/ETH/SOL分析
1,300 周安装
Shopify Liquid主题开发标准:CSS、JS、HTML最佳实践与BEM命名规范
1,300 周安装
Flutter跨平台开发教程:构建原生iOS/Android/Web/桌面应用
50 周安装
SYSLIB0056references/core-libraries-dotnet8to9.mdMicrosoft.Extensions.HttpBinaryFormatter usage → Serialization migration neededSystem.Text.Json usage → Serialization changes relevantdotnet build --no-incremental or delete bin/obj) on the current net8.0 target to establish a clean baseline. Record any pre-existing warnings.| System.Text.Json, HttpClient, networking | references/serialization-networking-dotnet8to9.md |
| Windows Forms or WPF | references/winforms-wpf-dotnet8to9.md |
| Docker containers, native interop | references/containers-interop-dotnet8to9.md |
| Runtime configuration, deployment | references/deployment-runtime-dotnet8to9.md |
StringValuesString.ConcatString.JoinPath.Combinereferences/core-libraries-dotnet8to9.mdNew obsoletion warnings (SYSLIB0054–SYSLIB0057) :
SYSLIB0054: Replace Thread.VolatileRead/VolatileWrite with Volatile.Read/Volatile.WriteSYSLIB0057: Replace X509Certificate2/X509Certificate binary/file constructors with X509CertificateLoader methodsSYSLIB0055 (ARM AdvSimd signed overloads) and SYSLIB0056 (Assembly.LoadFrom with hash algorithm) — see references/core-libraries-dotnet8to9.mdC# 13InlineArray on record structs — [InlineArray] attribute on record struct types is now disallowed (CS9259). Change to a regular struct. See references/csharp-compiler-dotnet8to9.md.
C# 13 iterator safe context — Iterators now introduce a safe context in C# 13. Local functions inside iterators that used unsafe code inherited from an outer unsafe class will now error. Add unsafe modifier to the local function. See references/csharp-compiler-dotnet8to9.md.
C# 13 collection expression overload resolution — Empty collection expressions ([]) no longer use span vs non-span to tiebreak overloads. Exact element type is now preferred. See references/csharp-compiler-dotnet8to9.md.
String.Trim(params ReadOnlySpan<char>) removed — Code compiled against .NET 9 previews that passes ReadOnlySpan<char> to Trim/TrimStart/TrimEnd must rebuild; the overload was removed in GA. See references/core-libraries-dotnet8to9.md.
BinaryFormatter always throws — If the project uses BinaryFormatter, stop and inform the user — this is a major decision. See references/serialization-networking-dotnet8to9.md.
HttpListenerRequest.UserAgent is nullable — The property is now string?. Add null checks. See references/serialization-networking-dotnet8to9.md.
Windows Forms nullability annotation changes — Some WinForms API parameters changed from nullable to non-nullable. Update call sites. See references/winforms-wpf-dotnet8to9.md.
Windows Forms security analyzers (WFO1000) — New analyzers produce errors for properties without explicit serialization configuration. See references/winforms-wpf-dotnet8to9.md.
new DateTime(2024, 1, 1, 0, 0, 0, DateTimeKind.Utc)references/efcore-dotnet8to9.mdEF Core: Explicit transaction exception — Migrate() inside a user transaction now throws. See references/efcore-dotnet8to9.md.
HttpClientFactory usesSocketsHttpHandler by default — Code that casts the primary handler to HttpClientHandler will get InvalidCastException. See references/serialization-networking-dotnet8to9.md.
HttpClientFactory header redaction by default — All header values in Trace-level logs are now redacted. See references/serialization-networking-dotnet8to9.md.
Environment variables take precedence over runtimeconfig.json — Runtime configuration settings from environment variables now override runtimeconfig.json. See references/deployment-runtime-dotnet8to9.md.
ASP.NET CoreValidateOnBuild/ValidateScopes in development — HostBuilder now enables DI validation in development by default. See references/aspnet-core-dotnet8to9.md.
ZipArchiveEntry names/comments now respect the UTF-8 flagIncrementingPollingCounter initial callback is now asynchronousInMemoryDirectoryInfo prepends rootDir to filesRuntimeHelpers.GetSubArray returns a different typePictureBox raises HttpRequestException instead of WebExceptionStatusStrip uses a different default rendererIMsoComponent support is opt-inSafeEvpPKeyHandle.DuplicateHandle up-refs the handleHttpClient metrics report server.port unconditionallydotnet watch is incompatible with Hot Reload for old frameworksGetXmlNamespaceMaps returns Hashtable instead of Stringreferences/cryptography-dotnet8to9.md| Project uses System.Security.Cryptography or X.509 certificates |
references/serialization-networking-dotnet8to9.md | Project uses BinaryFormatter, System.Text.Json, HttpClient, or networking APIs |
references/winforms-wpf-dotnet8to9.md | Project uses Windows Forms or WPF |
references/containers-interop-dotnet8to9.md | Project uses Docker containers or native interop (P/Invoke) |
references/deployment-runtime-dotnet8to9.md | Project uses runtime configuration, deployment, or has floating-point to integer conversions |