Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ description: >
NOT for writing new programs.
USE FOR: upgrading TargetFramework from net10.0 to net11.0, fixing build errors
after updating the .NET 11 SDK, resolving source-breaking and behavioral changes
in .NET 11 runtime, C# 15 compiler, and EF Core 11, adapting to updated minimum
in .NET 11 runtime, C# 15 / F# 11 compiler, and EF Core 11, adapting to updated minimum
hardware requirements (x86-64-v2, Arm64 LSE), and updating CI/CD pipelines and
Dockerfiles for .NET 11.
DO NOT USE FOR: .NET Framework migrations, upgrading from .NET 9 or earlier,
Expand All @@ -26,7 +26,7 @@ Migrate a .NET 10 project or solution to .NET 11, systematically resolving all b
- Resolving build errors or new warnings after updating the .NET 11 SDK
- Adapting to behavioral changes in .NET 11 runtime, ASP.NET Core 11, or EF Core 11
- Updating CI/CD pipelines, Dockerfiles, or deployment scripts for .NET 11
- Fixing C# 15 compiler breaking changes after SDK upgrade
- Fixing C# 15 / F# 11 compiler breaking changes after SDK upgrade
Comment thread
ViktorHofer marked this conversation as resolved.
Outdated

## When Not to Use

Expand All @@ -39,7 +39,7 @@ Migrate a .NET 10 project or solution to .NET 11, systematically resolving all b

| Input | Required | Description |
|-------|----------|-------------|
| Project or solution path | Yes | The `.csproj`, `.sln`, or `.slnx` entry point to migrate |
| Project or solution path | Yes | The `.csproj`, `.fsproj`, `.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, Cosmos DB, etc. Auto-detect from PackageReferences and SDK attributes if not provided |
Expand All @@ -52,7 +52,7 @@ Migrate a .NET 10 project or solution to .NET 11, systematically resolving all b

### Step 1: Assess the project

1. Identify how the project is built and tested. Look for build scripts, `.sln`/`.slnx` files, or individual `.csproj` files.
1. Identify how the project is built and tested. Look for build scripts, `.sln`/`.slnx` files, or individual `.csproj`/`.fsproj` files.
2. Run `dotnet --version` to confirm the .NET 11 SDK is installed. If it is not, stop and inform the user.
3. Determine which technology areas the project uses by examining:
- **SDK attribute**: `Microsoft.NET.Sdk.Web` → ASP.NET Core; `Microsoft.NET.Sdk.WindowsDesktop` with `<UseWPF>` or `<UseWindowsForms>` → WPF/WinForms
Expand All @@ -67,7 +67,7 @@ Migrate a .NET 10 project or solution to .NET 11, systematically resolving all b

### Step 2: Update the Target Framework

1. In each `.csproj` (or `Directory.Build.props` if centralized), change:
1. In each `.csproj`/`.fsproj` (or `Directory.Build.props` if centralized), change:
```xml
<TargetFramework>net10.0</TargetFramework>
```
Expand All @@ -89,7 +89,8 @@ Load reference documents based on the project's technology areas:

| Reference file | When to load |
|----------------|-------------|
| `references/csharp-compiler-dotnet10to11.md` | Always (C# 15 compiler breaking changes) |
| `references/csharp-compiler-dotnet10to11.md` | Project uses C# (C# 15 compiler breaking changes) |
| `references/fsharp-compiler-dotnet10to11.md` | Project uses F# (F# 11 compiler breaking changes) |
Comment thread
ViktorHofer marked this conversation as resolved.
Outdated
| `references/core-libraries-dotnet10to11.md` | Always (applies to all .NET 11 projects) |
| `references/sdk-msbuild-dotnet10to11.md` | Always (SDK and build tooling changes) |
| `references/efcore-dotnet10to11.md` | Project uses Entity Framework Core (especially Cosmos DB provider) |
Expand Down Expand Up @@ -185,7 +186,8 @@ The `references/` folder contains detailed breaking change information organized

| Reference file | When to load |
|----------------|-------------|
| `references/csharp-compiler-dotnet10to11.md` | Always (C# 15 compiler breaking changes) |
| `references/csharp-compiler-dotnet10to11.md` | Project uses C# (C# 15 compiler breaking changes) |
| `references/fsharp-compiler-dotnet10to11.md` | Project uses F# (F# 11 compiler breaking changes) |
| `references/core-libraries-dotnet10to11.md` | Always (applies to all .NET 11 projects) |
| `references/sdk-msbuild-dotnet10to11.md` | Always (SDK and build tooling changes) |
| `references/efcore-dotnet10to11.md` | Project uses Entity Framework Core (especially Cosmos DB provider) |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ name: migrate-dotnet8-to-dotnet9
description: >
Migrate a .NET 8 project to .NET 9 and resolve all breaking changes.
USE FOR: upgrading TargetFramework from net8.0 to net9.0, fixing build errors
after updating the .NET 9 SDK, resolving behavioral changes in .NET 9 / C# 13 /
after updating the .NET 9 SDK, resolving behavioral changes in .NET 9 / C# 13 / F# 9 /
ASP.NET Core 9 / EF Core 9, replacing BinaryFormatter (now always throws),
resolving SYSLIB0054-SYSLIB0057, adapting to params span overload resolution,
fixing C# 13 compiler changes, updating HttpClientFactory for SocketsHttpHandler,
fixing C# 13 / F# 9 compiler changes, updating HttpClientFactory for SocketsHttpHandler,
and resolving EF Core 9 migration/Cosmos DB changes.
DO NOT USE FOR: .NET Framework migrations, upgrading from .NET 7 or earlier,
greenfield .NET 9 projects, or cosmetic modernization unrelated to the upgrade.
Expand Down Expand Up @@ -35,7 +35,7 @@ Migrate a .NET 8 project or solution to .NET 9, systematically resolving all bre

| Input | Required | Description |
|-------|----------|-------------|
| Project or solution path | Yes | The `.csproj`, `.sln`, or `.slnx` entry point to migrate |
| Project or solution path | Yes | The `.csproj`, `.fsproj`, `.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 |
Expand All @@ -48,7 +48,7 @@ Migrate a .NET 8 project or solution to .NET 9, systematically resolving all bre

### Step 1: Assess the project

1. Identify how the project is built and tested. Look for build scripts, `.sln`/`.slnx` files, or individual `.csproj` files.
1. Identify how the project is built and tested. Look for build scripts, `.sln`/`.slnx` files, or individual `.csproj`/`.fsproj` files.
2. Run `dotnet --version` to confirm the .NET 9 SDK is installed. If it is not, stop and inform the user.
3. Determine which technology areas the project uses by examining:
- **SDK attribute**: `Microsoft.NET.Sdk.Web` → ASP.NET Core; `Microsoft.NET.Sdk.WindowsDesktop` with `<UseWPF>` or `<UseWindowsForms>` → WPF/WinForms
Expand All @@ -63,7 +63,7 @@ Migrate a .NET 8 project or solution to .NET 9, systematically resolving all bre

### Step 2: Update the Target Framework

1. In each `.csproj` (or `Directory.Build.props` if centralized), change:
1. In each `.csproj`/`.fsproj` (or `Directory.Build.props` if centralized), change:
```xml
<TargetFramework>net8.0</TargetFramework>
```
Expand All @@ -87,7 +87,8 @@ Work through compilation errors and new warnings systematically. Load the approp

| If the project uses… | Load reference |
|-----------------------|----------------|
| Any .NET 9 project | `references/csharp-compiler-dotnet8to9.md` |
| C# project | `references/csharp-compiler-dotnet8to9.md` |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this duplicates the "when to load" at the end. I don't remember doing that-- maybe I forgot? But seems one should be deleted.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed the duplicate Step 3 table in e95247e. The Reference Documents section at the bottom is now the single source of truth. Step 3 just says to load from that table. Applied to all three skills.

| F# project | `references/fsharp-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` |
Expand Down Expand Up @@ -219,7 +220,8 @@ The `references/` folder contains detailed breaking change information organized

| 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/csharp-compiler-dotnet8to9.md` | Project uses C# (C# 13 compiler breaking changes — InlineArray on records, iterator safe context, collection expression overloads) |
| `references/fsharp-compiler-dotnet8to9.md` | Project uses F# (F# 9 compiler breaking changes) |
| `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 |
Expand Down
19 changes: 11 additions & 8 deletions plugins/dotnet-upgrade/skills/migrate-dotnet9-to-dotnet10/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@ description: >
Migrate a .NET 9 project or solution to .NET 10 and resolve all breaking changes.
USE FOR: upgrading TargetFramework from net9.0 to net10.0, fixing build errors
after updating the .NET 10 SDK, resolving source and behavioral changes in
.NET 10 / C# 14 / ASP.NET Core 10 / EF Core 10, updating Dockerfiles for
.NET 10 / C# 14 / F# 10 / ASP.NET Core 10 / EF Core 10, updating Dockerfiles for
Debian-to-Ubuntu base images, resolving obsoletion warnings
(SYSLIB0058-SYSLIB0062), adapting to SDK/NuGet changes (NU1510,
PrunePackageReference), migrating System.Linq.Async to built-in
AsyncEnumerable, fixing OpenApi v2 API changes, cryptography renames, and
C# 14 compiler changes (field keyword, extension keyword, span overloads).
C# 14 / F# 10 compiler changes (field keyword, extension keyword, span overloads).
Comment thread
ViktorHofer marked this conversation as resolved.
Outdated
DO NOT USE FOR: .NET Framework migrations, upgrading from .NET 8 or earlier
(use migrate-dotnet8-to-dotnet9 first), greenfield .NET 10 projects, or
cosmetic modernization.
LOADS REFERENCES: csharp-compiler, core-libraries, sdk-msbuild (always);
LOADS REFERENCES: csharp-compiler (C# projects), fsharp-compiler (F# projects),
core-libraries, sdk-msbuild (always);
aspnet-core, efcore, cryptography, extensions-hosting,
serialization-networking, winforms-wpf, containers-interop (selective).
---
Expand Down Expand Up @@ -41,7 +42,7 @@ Migrate a .NET 9 project or solution to .NET 10, systematically resolving all br

| Input | Required | Description |
|-------|----------|-------------|
| Project or solution path | Yes | The `.csproj`, `.sln`, or `.slnx` entry point to migrate |
| Project or solution path | Yes | The `.csproj`, `.fsproj`, `.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 |
Expand All @@ -54,7 +55,7 @@ Migrate a .NET 9 project or solution to .NET 10, systematically resolving all br

### Step 1: Assess the project

1. Identify how the project is built and tested. Look for build scripts, `.sln`/`.slnx` files, or individual `.csproj` files.
1. Identify how the project is built and tested. Look for build scripts, `.sln`/`.slnx` files, or individual `.csproj`/`.fsproj` files.
2. Run `dotnet --version` to confirm the .NET 10 SDK is installed. If it is not, stop and inform the user.
3. Determine which technology areas the project uses by examining:
- **SDK attribute**: `Microsoft.NET.Sdk.Web` → ASP.NET Core; `Microsoft.NET.Sdk.WindowsDesktop` with `<UseWPF>` or `<UseWindowsForms>` → WPF/WinForms
Expand All @@ -68,7 +69,7 @@ Migrate a .NET 9 project or solution to .NET 10, systematically resolving all br

### Step 2: Update the Target Framework

1. In each `.csproj` (or `Directory.Build.props` if centralized), change:
1. In each `.csproj`/`.fsproj` (or `Directory.Build.props` if centralized), change:
```xml
<TargetFramework>net9.0</TargetFramework>
```
Expand All @@ -93,7 +94,8 @@ Work through compilation errors and new warnings systematically. Load the approp

| If the project uses… | Load reference |
|-----------------------|----------------|
| Any .NET 10 project | `references/csharp-compiler-dotnet9to10.md` |
| C# project | `references/csharp-compiler-dotnet9to10.md` |
| F# project | `references/fsharp-compiler-dotnet9to10.md` |
| Any .NET 10 project | `references/core-libraries-dotnet9to10.md` |
Comment thread
ViktorHofer marked this conversation as resolved.
Outdated
| Any .NET 10 project | `references/sdk-msbuild-dotnet9to10.md` |
| ASP.NET Core | `references/aspnet-core-dotnet9to10.md` |
Expand Down Expand Up @@ -261,7 +263,8 @@ The `references/` folder contains detailed breaking change information organized

| Reference file | When to load |
|----------------|-------------|
| `references/csharp-compiler-dotnet9to10.md` | Always (C# 14 compiler breaking changes — field keyword, extension keyword, span overloads) |
| `references/csharp-compiler-dotnet9to10.md` | Project uses C# (C# 14 compiler breaking changes — field keyword, extension keyword, span overloads) |
| `references/fsharp-compiler-dotnet9to10.md` | Project uses F# (F# 10 compiler breaking changes) |
| `references/core-libraries-dotnet9to10.md` | Always (applies to all .NET 10 projects) |
| `references/sdk-msbuild-dotnet9to10.md` | Always (SDK and build tooling changes) |
| `references/aspnet-core-dotnet9to10.md` | Project uses ASP.NET Core |
Expand Down