From b83a099df461e5467f7f123caf697cf9fd8b5dd7 Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Mon, 15 Sep 2025 12:38:38 -0700 Subject: [PATCH 01/12] Add release notes for .NET 10 RC 2 across various components --- .../prompts/createprs-for-preview.prompt.md | 130 +++++++++++------- .github/prompts/scaffoldpreview.prompt.md | 65 +++++++-- release-notes/10.0/preview/rc2/README.md | 40 ++++++ release-notes/10.0/preview/rc2/aspnetcore.md | 14 ++ release-notes/10.0/preview/rc2/containers.md | 3 + release-notes/10.0/preview/rc2/csharp.md | 8 ++ release-notes/10.0/preview/rc2/dotnetmaui.md | 7 + release-notes/10.0/preview/rc2/efcore.md | 8 ++ release-notes/10.0/preview/rc2/fsharp.md | 3 + release-notes/10.0/preview/rc2/libraries.md | 7 + release-notes/10.0/preview/rc2/runtime.md | 15 ++ release-notes/10.0/preview/rc2/sdk.md | 13 ++ release-notes/10.0/preview/rc2/visualbasic.md | 6 + release-notes/10.0/preview/rc2/winforms.md | 7 + release-notes/10.0/preview/rc2/wpf.md | 7 + 15 files changed, 268 insertions(+), 65 deletions(-) create mode 100644 release-notes/10.0/preview/rc2/README.md create mode 100644 release-notes/10.0/preview/rc2/aspnetcore.md create mode 100644 release-notes/10.0/preview/rc2/containers.md create mode 100644 release-notes/10.0/preview/rc2/csharp.md create mode 100644 release-notes/10.0/preview/rc2/dotnetmaui.md create mode 100644 release-notes/10.0/preview/rc2/efcore.md create mode 100644 release-notes/10.0/preview/rc2/fsharp.md create mode 100644 release-notes/10.0/preview/rc2/libraries.md create mode 100644 release-notes/10.0/preview/rc2/runtime.md create mode 100644 release-notes/10.0/preview/rc2/sdk.md create mode 100644 release-notes/10.0/preview/rc2/visualbasic.md create mode 100644 release-notes/10.0/preview/rc2/winforms.md create mode 100644 release-notes/10.0/preview/rc2/wpf.md diff --git a/.github/prompts/createprs-for-preview.prompt.md b/.github/prompts/createprs-for-preview.prompt.md index 2636924be0..ab40c370c9 100644 --- a/.github/prompts/createprs-for-preview.prompt.md +++ b/.github/prompts/createprs-for-preview.prompt.md @@ -1,62 +1,83 @@ -# Create PRs for .NET 10 RC 1 +# Create PRs for .NET Preview or RC -Use this workflow to create one PR per release-notes file for .NET 10 RC 1. +Use this workflow to create one PR per release-notes file for a specific .NET Preview or RC milestone. You will supply three inputs when you invoke it: -Fixed settings: +- DOTNET_VERSION (major only, e.g. 10, 11) +- MILESTONE_KIND (`preview` or `rc`) +- MILESTONE_NUMBER (preview: 1–7, rc: 1–2) -- Version Major: 10 -- Version Path: 10.0 -- Milestone Kind: `rc` -- Milestone Number: `1` +PR numbers and historical references remain concrete; only version and milestone values change per cycle. -Derived values: +## Sample Inputs (Example) -- Release notes folder: `release-notes/10.0/preview/rc1` -- Base branch: `dotnet10-rc1` -- Per-file working branch: `dotnet10-rc1-{name}` -- Milestone label: `RC 1` +Example below uses: DOTNET_VERSION=10, MILESTONE_KIND=rc, MILESTONE_NUMBER=2 (".NET 10 RC 2"). Replace these values when running for a different milestone. -Process (repeat per file in the RC1 folder): +## Runtime Inputs (provide these when invoking) -1. Create a new branch from the base branch `dotnet10-rc1` with name `dotnet10-rc1-{name}` -1. Modify the corresponding file by replacing any "TBD" placeholder text with: `Something about the feature`. -1. Validate markdown formatting using markdownlint with the repository's settings (`.github/linters/.markdown-lint.yml`). -1. Commit with message: `Update {name} for RC 1`. -1. Push the branch to the remote repository. -1. Create a pull request with: +Required: + +- DOTNET_VERSION (major) – e.g. 10 +- MILESTONE_KIND – `preview` or `rc` +- MILESTONE_NUMBER – preview: 1–7, rc: 1–2 + +Derived (logic performed mentally / by assistant at run time): + +- Version Path = `${DOTNET_VERSION}.0` +- Milestone Label = if preview → `Preview ${MILESTONE_NUMBER}` else `RC ${MILESTONE_NUMBER}` +- Milestone Prefix = preview → `p${MILESTONE_NUMBER}` ; rc → `rc${MILESTONE_NUMBER}` +- Base Branch = `dotnet${DOTNET_VERSION}-${MilestonePrefix}` (example: `dotnet10-rc2`) +- Working Branch Pattern = `dotnet${DOTNET_VERSION}-${MilestonePrefix}-{name}` +- Release Notes Folder = `release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}` (historical path keeps `preview/rcX` for RC) -- Title: `Update {name} for RC 1` -- Body: `Please update the release notes here as needed for RC 1.\n\n/cc @{assignees}` +Example (NOT to be edited into the file): DOTNET_VERSION=10, MILESTONE_KIND=rc, MILESTONE_NUMBER=2 ⇒ label `RC 2`, prefix `rc2`. -1. Assign the PR using GitHub CLI: `gh pr edit --add-assignee ` (use the first listed person for files with multiple assignees) -1. Switch back to the base branch `dotnet10-rc1` and repeat for the next file. +## Process (assistant substitutes variables at execution time) -Notes: +1. Create a new branch from the base branch: `git switch -c dotnet${DOTNET_VERSION}-${MilestonePrefix}-{name} origin/dotnet${DOTNET_VERSION}-${MilestonePrefix}` +1. Modify the file: replace any placeholder like `TBD`, `Coming soon`, or `TODO` with a single line `Something about the feature` (do NOT append duplicates). +1. Run markdown lint: `npx markdownlint --config .github/linters/.markdown-lint.yml release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}/{name}` +1. Commit: `Update {name} for ${Milestone Label}` +1. Push the branch +1. Create a pull request with: + - Title: `Update {name} for ${Milestone Label}` + - Body (exact format): + ``` + Please update the release notes here as needed for ${Milestone Label}. + + /cc @{assignees} + ``` +1. Assign the PR (first listed person if multiple): `gh pr edit --add-assignee ` +1. Switch back to `dotnet${DOTNET_VERSION}-${MilestonePrefix}` and continue with the next file. -- All RC 1 release notes are in the `release-notes/10.0/preview/rc1/` directory. +## Notes + +- All milestone release notes live under `release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}/`. - Keep the same file-to-assignee mapping unless explicitly changed. -- Use GitHub CLI for assignments as it's more reliable than the API: `gh pr edit --add-assignee ` -- For files with multiple assignees, assign to the first listed person only. -- Replace "TBD" placeholders rather than adding content to avoid duplication. -- Run markdownlint validation before committing: The repository uses `.github/linters/.markdown-lint.yml` for linting rules. -- Ensure all markdown files have proper trailing newlines and follow the established formatting standards. - -## Assignment Table (based on Preview 7 PRs) - -| File | Assignee(s) | Based on Preview 7 PR | -|------|-------------|-----------------------| -| aspnetcore.md | @danroth27 | #10023 | -| containers.md | @lbussell | #9995 | -| csharp.md | @BillWagner @MadsTorgersen @jcouv | #9996 | -| dotnetmaui.md | @davidortinau | #9997 | -| efcore.md | @roji | #9998 | -| fsharp.md | @T-Gro | #9999 | -| libraries.md | @richlander @tarekgh | #10000 | -| runtime.md | @ericstj @kunalspathak @AndyAyersMS | #10001 | -| sdk.md | @baronfel @mariam-abdulla @nohwnd @DamianEdwards | #10002 | -| visualbasic.md | @BillWagner | #10003 | -| winforms.md | @merriemcgaw @KlausLoeffelmann | #10004 | -| wpf.md | @harshit7962 @adegeo | #10005 | +- Use GitHub CLI for assignee setting; it's more reliable than reviewer assignment for this workflow. +- Always replace placeholders rather than appending text to avoid duplicates. +- Ensure trailing newline, consistent heading style, and no stray whitespace. +- Optional: for JSON meta changes run `npx prettier --check "release-notes/${DOTNET_VERSION}.0/**/*.json"` (do not auto-fix when only reporting). + +No need to edit this file between milestones. Provide DOTNET_VERSION, MILESTONE_KIND, MILESTONE_NUMBER each time; assistant derives the rest. Leave PR number references and assignment history intact unless ownership changes. + +## Assignment Table (updated using .NET 10 RC 1 assignees) + +The table below reflects the assignee(s) actually used on the most recent component PRs for .NET 10 RC 1 (PRs #10049–#10060). Use these as the current default owners for upcoming milestones unless ownership changes again. Notable change: libraries and runtime primary owners effectively swapped compared to Preview 7 (libraries → @ericstj, runtime → @richlander). Additional previously listed secondary owners were trimmed where they were not present as assignees on the RC 1 PR. + +| File | Assignee(s) | .NET 10 RC 1 PR | +|------|-------------|-----------------| +| aspnetcore.md | @danroth27 | #10049 | +| containers.md | @lbussell | #10050 | +| csharp.md | @BillWagner | #10051 | +| dotnetmaui.md | @davidortinau | #10052 | +| efcore.md | @roji | #10053 | +| fsharp.md | @T-Gro | #10054 | +| libraries.md | @ericstj @artl93 | #10055 | +| runtime.md | @richlander | #10056 | +| sdk.md | @baronfel | #10057 | +| visualbasic.md | @BillWagner | #10058 | +| winforms.md | @KlausLoeffelmann @merriemcgaw | #10059 | +| wpf.md | @harshit7962 @adegeo | #10060 | Here are the files to process one at a time: @@ -75,9 +96,14 @@ Here are the files to process one at a time: ## Master Consolidation PR -After creating all individual component PRs, create a master consolidation PR: +After all component PRs are opened for the milestone, create a consolidation PR: + +1. Source: `dotnet${DOTNET_VERSION}-${MilestonePrefix}` → Target: `main` +1. Title: `Add release notes for .NET ${DOTNET_VERSION} ${Milestone Label} across various components` +1. Body sections: + - Intro sentence + - Bullet list of component PRs (e.g. `- ASP.NET Core: #`) + - CC release management (e.g. `@leecow @rbhanda @victorisr`) +1. Match the structure used previously (see Preview 7 consolidation PR #10006) for consistency. -1. Create a PR from `dotnet10-rc1` to `main` with: - - Title: `Add release notes for .NET 10 RC 1 across various components` - - Body: Include references to all component PRs and cc the release management team - - Pattern: Follow the same structure as the Preview 7 master PR (#10006) +When adapting for another milestone, update only the branch name, title milestone label, and intro sentence. diff --git a/.github/prompts/scaffoldpreview.prompt.md b/.github/prompts/scaffoldpreview.prompt.md index 387693e2b9..f68e1c86ca 100644 --- a/.github/prompts/scaffoldpreview.prompt.md +++ b/.github/prompts/scaffoldpreview.prompt.md @@ -1,24 +1,63 @@ -# Scaffold Preview +# Scaffold Release Notes Folder (Preview or RC) -Create a new folder in the releasenotes/10.0/preview folder for preview7. Inside of it duplicate the folder structure and files that are in the preview6 folder and for each of the files use the following template based on the names of the product that the file is in. You can use the previous file as a reference for the content. Ignore the api-diff folder. Ignore the release.json file. +This prompt guides creating the next milestone release-notes folder for a .NET Preview or RC. Supply three inputs when invoking it (no file edits required between runs): -Here is a sample of what aspnetcore.md should look like: +- DOTNET_VERSION (major, e.g. 10, 11) +- MILESTONE_KIND (`preview` or `rc`) +- MILESTONE_NUMBER (preview: 1–7, rc: 1–2) -```markdown -# ASP.NET Core in .NET 10 Preview 7 - Release Notes +Only these values should change between cycles. Keep concrete links and historical references intact unless they genuinely change. -Here's a summary of what's new in ASP.NET Core in this preview release: +## Runtime Derivations -- [Feature](#feature) +Given inputs: -ASP.NET Core updates in .NET 10: +- Milestone Label = if MILESTONE_KIND=preview → `Preview ${MILESTONE_NUMBER}` else `RC ${MILESTONE_NUMBER}` +- Milestone Prefix = preview → `p${MILESTONE_NUMBER}` ; rc → `rc${MILESTONE_NUMBER}` +- Base Branch = `dotnet${DOTNET_VERSION}-${MilestonePrefix}` +- Target Folder = `release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}` -- [What's new in ASP.NET Core in .NET 10](https://learn.microsoft.com/aspnet/core/release-notes/aspnetcore-10.0) documentation. -- [Breaking changes](https://docs.microsoft.com/dotnet/core/compatibility/10.0#aspnet-core) -- [Roadmap](https://github.com/dotnet/aspnetcore/issues/59443) +Example (not baked in): DOTNET_VERSION=10, MILESTONE_KIND=rc, MILESTONE_NUMBER=2 ⇒ Label `RC 2`, Prefix `rc2`. + +## Steps + +1. Navigate to `release-notes/${DOTNET_VERSION}.0/preview/`. +2. Duplicate the previous milestone folder (prior prefix → new prefix, e.g. `rc1` → `${MilestonePrefix}` or `p6` → `${MilestonePrefix}`). +3. Remove (do NOT copy): + - `api-diff` directory (if present) – will be regenerated later. + - `release.json` – create a fresh one if required by process. +4. For each component markdown file, update the heading and milestone label only; preserve existing anchor structure. +5. If there are no new feature items yet, insert a neutral placeholder sentence (e.g. `This ${Milestone Label} release does not introduce new ${Product} features.`) instead of a generic "Something about the feature" line. Avoid duplicating placeholder lines. +6. Run markdown lint: `npx markdownlint --config .github/linters/.markdown-lint.yml release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}/*.md`. +7. Commit on the base milestone branch (`dotnet${DOTNET_VERSION}-${MilestonePrefix}`) with message: `Scaffold .NET ${DOTNET_VERSION} ${Milestone Label} release notes folder`. + +## Sample File Template (aspnetcore.md – dynamic) + +```markdown +# ASP.NET Core in .NET ${DOTNET_VERSION} ${Milestone Label} - Release Notes -## Feature +Here's a summary of what's new in ASP.NET Core in this release (add or remove sections as needed). -Something about the feature +ASP.NET Core updates in .NET ${DOTNET_VERSION}: +- [What's new in ASP.NET Core in .NET ${DOTNET_VERSION}](https://learn.microsoft.com/aspnet/core/release-notes/aspnetcore-${DOTNET_VERSION}.0) documentation. +- [Breaking changes](https://docs.microsoft.com/dotnet/core/compatibility/${DOTNET_VERSION}.0#aspnet-core) +- [Roadmap](https://github.com/dotnet/aspnetcore/issues/59443) + +This ${Milestone Label} release does not contain new ASP.NET Core feature additions. ``` + +## Conventions (stable across milestones) + +- Top-level heading: `# in .NET - Release Notes` +- Use sentence case for section headings after the H1. +- Keep relative links; avoid hardcoding version unless the doc page is versioned (as above for 10.0 links). +- One blank line between blocks; file ends with a newline. + +## After Scaffolding + +- Proceed with per-file PR creation using the separate PR creation prompt. +- Do not add real feature text until component owners update their individual PRs. +- Run a Prettier check if any JSON metadata was added: `npx prettier --check "release-notes/${DOTNET_VERSION}.0/**/*.json"`. + +No file edits needed between milestones—provide inputs at execution. Leave roadmap issue numbers unless they genuinely change upstream. diff --git a/release-notes/10.0/preview/rc2/README.md b/release-notes/10.0/preview/rc2/README.md new file mode 100644 index 0000000000..f99488a4c6 --- /dev/null +++ b/release-notes/10.0/preview/rc2/README.md @@ -0,0 +1,40 @@ +# .NET 10 RC 2 - Release Notes + +.NET 10 RC 2 released on . Find more information on new features released in .NET 10 RC 2 by browsing through the release notes below: + +- [Libraries](./libraries.md) +- [Runtime](./runtime.md) +- [SDK](./sdk.md) + +## Languages + +- [C#](./csharp.md) +- [F#](./fsharp.md) +- [Visual Basic](./visualbasic.md) + +## Workloads, Libraries, & More + +- [.NET MAUI](./dotnetmaui.md) +- [ASP.NET Core](./aspnetcore.md) +- [Container images](./containers.md) +- [EF Core & Data](./efcore.md) +- [Windows Forms](./winforms.md) +- [WPF](./wpf.md) + +## Get Started + +Instructions on getting started with .NET 10 can be found in the [getting started guide](../../get-started.md). Installers and binaries for .NET 10 RC 2 can be found [here on GitHub](./10.0.0-rc.2.md). + +## Stay up-to-date + +You can find a detailed overview of all new features in .NET 10: + +- [What's new in .NET 10](https://learn.microsoft.com/dotnet/core/whats-new/dotnet-10/overview) +- [What's new in C# 14](https://learn.microsoft.com/dotnet/csharp/whats-new/csharp-14) +- [What's new in .NET MAUI](https://learn.microsoft.com/dotnet/maui/whats-new/dotnet-10) +- [What's new in ASP.NET Core](https://learn.microsoft.com/aspnet/core/release-notes/aspnetcore-10.0) +- [What's new in Entity Framework Core](https://learn.microsoft.com/ef/core/what-is-new/ef-core-10.0/whatsnew) +- [What's new in Windows Forms](https://learn.microsoft.com/dotnet/desktop/winforms/whats-new/net100) +- [What's new in WPF](https://learn.microsoft.com/dotnet/desktop/wpf/whats-new/net100) + +The latest .NET 10 release is always available at [dotnet.microsoft.com](https://dotnet.microsoft.com/download/dotnet/10.0) and [.NET 10 Releases](../../README.md). diff --git a/release-notes/10.0/preview/rc2/aspnetcore.md b/release-notes/10.0/preview/rc2/aspnetcore.md new file mode 100644 index 0000000000..c6f542206b --- /dev/null +++ b/release-notes/10.0/preview/rc2/aspnetcore.md @@ -0,0 +1,14 @@ +# ASP.NET Core in .NET 10 RC 2 - Release Notes + +This RC 2 release does not contain new ASP.NET Core feature additions. + +ASP.NET Core updates in .NET 10: + +* [What's new in ASP.NET Core in .NET 10](https://learn.microsoft.com/aspnet/core/release-notes/aspnetcore-10.0) documentation. +* [Breaking changes](https://docs.microsoft.com/dotnet/core/compatibility/10.0#aspnet-core) +* [Roadmap](https://aka.ms/aspnet/roadmap) + +.NET 10 RC 2: + +* [Discussion](https://aka.ms/dotnet/10/rc2) +* [Release notes](README.md) diff --git a/release-notes/10.0/preview/rc2/containers.md b/release-notes/10.0/preview/rc2/containers.md new file mode 100644 index 0000000000..cf281726e8 --- /dev/null +++ b/release-notes/10.0/preview/rc2/containers.md @@ -0,0 +1,3 @@ +# Containers in .NET 10 RC 2 - Release Notes + +This RC 2 release does not contain new Container image features. diff --git a/release-notes/10.0/preview/rc2/csharp.md b/release-notes/10.0/preview/rc2/csharp.md new file mode 100644 index 0000000000..b4bc013580 --- /dev/null +++ b/release-notes/10.0/preview/rc2/csharp.md @@ -0,0 +1,8 @@ +# C# 14 updates in .NET 10 RC 2 - Release Notes + +This RC 2 release does not contain new C# features. + +C# 14 updates: + +- [What's new in C# 14](https://learn.microsoft.com/dotnet/csharp/whats-new/csharp-14) documentation +- [Breaking changes in C# 14](https://learn.microsoft.com/dotnet/csharp/whats-new/breaking-changes/compiler%20breaking%20changes%20-%20dotnet%2010) diff --git a/release-notes/10.0/preview/rc2/dotnetmaui.md b/release-notes/10.0/preview/rc2/dotnetmaui.md new file mode 100644 index 0000000000..4261cbe3f7 --- /dev/null +++ b/release-notes/10.0/preview/rc2/dotnetmaui.md @@ -0,0 +1,7 @@ +# .NET MAUI in .NET 10 RC 2 - Release Notes + +This RC 2 release does not contain new .NET MAUI feature additions. + +.NET MAUI updates in .NET 10: + +- [What's new in .NET MAUI in .NET 10](https://learn.microsoft.com/dotnet/maui/whats-new/dotnet-10) documentation. diff --git a/release-notes/10.0/preview/rc2/efcore.md b/release-notes/10.0/preview/rc2/efcore.md new file mode 100644 index 0000000000..ae1c9afc0c --- /dev/null +++ b/release-notes/10.0/preview/rc2/efcore.md @@ -0,0 +1,8 @@ +# Entity Framework Core in .NET 10 RC 2 - Release Notes + +This RC 2 release does not contain new Entity Framework Core feature additions. + +Entity Framework Core 10 updates: + +- [What's new in Entity Framework Core 10](https://learn.microsoft.com/ef/core/what-is-new/ef-core-10.0/whatsnew) documentation +- [Breaking change in Entity Framework Core 10](https://learn.microsoft.com/ef/core/what-is-new/ef-core-10.0/breaking-changes) diff --git a/release-notes/10.0/preview/rc2/fsharp.md b/release-notes/10.0/preview/rc2/fsharp.md new file mode 100644 index 0000000000..27e4bdcf1d --- /dev/null +++ b/release-notes/10.0/preview/rc2/fsharp.md @@ -0,0 +1,3 @@ +# F# in .NET 10 RC 2 - Release Notes + +This RC 2 release does not contain new F# features. View the [What's new in F#](https://fsharp.github.io/fsharp-compiler-docs/release-notes/Language.html) documentation to learn more. diff --git a/release-notes/10.0/preview/rc2/libraries.md b/release-notes/10.0/preview/rc2/libraries.md new file mode 100644 index 0000000000..f4c6e84fa3 --- /dev/null +++ b/release-notes/10.0/preview/rc2/libraries.md @@ -0,0 +1,7 @@ +# Libraries in .NET 10 RC 2 - Release Notes + +This RC 2 release does not contain new Libraries feature additions. + +.NET Libraries updates in .NET 10: + +- [What's new in .NET 10](https://learn.microsoft.com/dotnet/core/whats-new/dotnet-10/overview) documentation diff --git a/release-notes/10.0/preview/rc2/runtime.md b/release-notes/10.0/preview/rc2/runtime.md new file mode 100644 index 0000000000..f760374380 --- /dev/null +++ b/release-notes/10.0/preview/rc2/runtime.md @@ -0,0 +1,15 @@ +# Runtime updates in .NET 10 Release Candidate 2 + +This release was focused on quality improvements as we near general availability of .NET 10. It is covered by a go-live license, and we encourage developers today to try it out and provide feedback on anything that you find in your development so we can incorporate any additional enhancements into the final release. + +Runtime updates in .NET 10 Release Candidate 2: + +* [What's new in the .NET Runtime in .NET 10](https://learn.microsoft.com/dotnet/core/whats-new/dotnet-10/overview) documentation +* (Changelog link to be updated when tag is available) + +.NET 10 RC 2: + +* [Discussion](https://aka.ms/dotnet/10/rc2) +* [Release notes](README.md) +* [SDK release notes](sdk.md) +* [Libraries release notes](libraries.md) diff --git a/release-notes/10.0/preview/rc2/sdk.md b/release-notes/10.0/preview/rc2/sdk.md new file mode 100644 index 0000000000..d2bf99088b --- /dev/null +++ b/release-notes/10.0/preview/rc2/sdk.md @@ -0,0 +1,13 @@ +# SDK in .NET 10 RC 2 - Release Notes + +This release was focused on quality improvements as we near general availability of .NET 10. It is covered by a go-live license, and we encourage developers today to try it out and provide feedback on anything that you find in your development so we can incorporate any additional enhancements into the final release. + +* [What's new in the .NET Runtime in .NET 10](https://learn.microsoft.com/dotnet/core/whats-new/dotnet-10/overview) documentation +* (Changelog link to be updated when tag is available) + +.NET 10 RC 2: + +* [Discussion](https://aka.ms/dotnet/10/rc2) +* [Release notes](README.md) +* [Runtime release notes](runtime.md) +* [Libraries release notes](libraries.md) diff --git a/release-notes/10.0/preview/rc2/visualbasic.md b/release-notes/10.0/preview/rc2/visualbasic.md new file mode 100644 index 0000000000..7184a65544 --- /dev/null +++ b/release-notes/10.0/preview/rc2/visualbasic.md @@ -0,0 +1,6 @@ +# Visual Basic in .NET 10 RC 2 - Release Notes + +This RC 2 release does not contain new Visual Basic features. Please checkout the latest documentation: + +- [What's new in Visual Basic](https://learn.microsoft.com/dotnet/visual-basic/whats-new/) documentation +- [Breaking changes](https://learn.microsoft.com/dotnet/visual-basic/whats-new/breaking-changes) diff --git a/release-notes/10.0/preview/rc2/winforms.md b/release-notes/10.0/preview/rc2/winforms.md new file mode 100644 index 0000000000..cf3170512e --- /dev/null +++ b/release-notes/10.0/preview/rc2/winforms.md @@ -0,0 +1,7 @@ +# WinForms .NET 10 RC2 Release Notes + +This RC 2 release does not contain new Windows Forms feature additions. + +Windows Forms updates in .NET 10: + +- [What's new in Windows Forms](https://learn.microsoft.com/dotnet/desktop/winforms/whats-new/net100) documentation diff --git a/release-notes/10.0/preview/rc2/wpf.md b/release-notes/10.0/preview/rc2/wpf.md new file mode 100644 index 0000000000..619679d8f6 --- /dev/null +++ b/release-notes/10.0/preview/rc2/wpf.md @@ -0,0 +1,7 @@ +# WPF in .NET 10 RC 2 - Release Notes + +This RC 2 release does not contain new WPF features. + +WPF updates in .NET 10: + +- [What's new in WPF in .NET 10](https://learn.microsoft.com/dotnet/desktop/wpf/whats-new/net100) documentation From 801a339d3133aa8f6b49239f2408b66047970b15 Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Mon, 15 Sep 2025 13:11:21 -0700 Subject: [PATCH 02/12] Clarify scaffold replacement instructions for RC2 PR generation --- .github/prompts/createprs-for-preview.prompt.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/prompts/createprs-for-preview.prompt.md b/.github/prompts/createprs-for-preview.prompt.md index ab40c370c9..db63e5e4f2 100644 --- a/.github/prompts/createprs-for-preview.prompt.md +++ b/.github/prompts/createprs-for-preview.prompt.md @@ -34,7 +34,22 @@ Example (NOT to be edited into the file): DOTNET_VERSION=10, MILESTONE_KIND=rc, ## Process (assistant substitutes variables at execution time) 1. Create a new branch from the base branch: `git switch -c dotnet${DOTNET_VERSION}-${MilestonePrefix}-{name} origin/dotnet${DOTNET_VERSION}-${MilestonePrefix}` -1. Modify the file: replace any placeholder like `TBD`, `Coming soon`, or `TODO` with a single line `Something about the feature` (do NOT append duplicates). +1. Modify the file content: + - If the file contains a neutral/no-new-features sentence such as: + * `This ${Milestone Label} release does not contain new` … OR + * `This RC 2 release does not contain new` … + replace that ENTIRE sentence block with the following scaffold (customize the product/area name appropriately — keep heading anchors lowercase with hyphens): + ```markdown + Here's a summary of what's new in in this ${Milestone Label} release: + + - [Feature](#feature) + + ## Feature + + Feature summary + ``` + - Otherwise, insert the above placeholder text directly below the heading. + - Do NOT append duplicates; always replace in-place. 1. Run markdown lint: `npx markdownlint --config .github/linters/.markdown-lint.yml release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}/{name}` 1. Commit: `Update {name} for ${Milestone Label}` 1. Push the branch From 4ba14aec3c0f9117213f694fde207bfd984e5978 Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Mon, 15 Sep 2025 16:08:24 -0700 Subject: [PATCH 03/12] chore: clean markdownlint issues in preview/RC automation prompt files --- .../prompts/createprs-for-preview.prompt.md | 50 +++++++++---------- .github/prompts/scaffoldpreview.prompt.md | 16 +++--- 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/.github/prompts/createprs-for-preview.prompt.md b/.github/prompts/createprs-for-preview.prompt.md index db63e5e4f2..95552281e7 100644 --- a/.github/prompts/createprs-for-preview.prompt.md +++ b/.github/prompts/createprs-for-preview.prompt.md @@ -34,33 +34,29 @@ Example (NOT to be edited into the file): DOTNET_VERSION=10, MILESTONE_KIND=rc, ## Process (assistant substitutes variables at execution time) 1. Create a new branch from the base branch: `git switch -c dotnet${DOTNET_VERSION}-${MilestonePrefix}-{name} origin/dotnet${DOTNET_VERSION}-${MilestonePrefix}` -1. Modify the file content: - - If the file contains a neutral/no-new-features sentence such as: - * `This ${Milestone Label} release does not contain new` … OR - * `This RC 2 release does not contain new` … - replace that ENTIRE sentence block with the following scaffold (customize the product/area name appropriately — keep heading anchors lowercase with hyphens): - ```markdown - Here's a summary of what's new in in this ${Milestone Label} release: - - - [Feature](#feature) - - ## Feature - - Feature summary - ``` - - Otherwise, insert the above placeholder text directly below the heading. - - Do NOT append duplicates; always replace in-place. +1. Modify the file content. If the file contains a neutral/no-new-features sentence such as `This ${Milestone Label} release does not contain new ...` (or the equivalent for a specific RC) replace that entire sentence block with the scaffold below. If no neutral sentence exists, insert the scaffold directly below the heading (only once; do not duplicate it). + +```markdown +Here's a summary of what's new in in this ${Milestone Label} release: + +- [Feature](#feature) + +## Feature + +Feature summary +``` + 1. Run markdown lint: `npx markdownlint --config .github/linters/.markdown-lint.yml release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}/{name}` 1. Commit: `Update {name} for ${Milestone Label}` 1. Push the branch -1. Create a pull request with: - - Title: `Update {name} for ${Milestone Label}` - - Body (exact format): - ``` - Please update the release notes here as needed for ${Milestone Label}. - - /cc @{assignees} - ``` +1. Create a pull request with title `Update {name} for ${Milestone Label}` and body: + +```text +Please update the release notes here as needed for ${Milestone Label}. + +/cc @{assignees} +``` + 1. Assign the PR (first listed person if multiple): `gh pr edit --add-assignee ` 1. Switch back to `dotnet${DOTNET_VERSION}-${MilestonePrefix}` and continue with the next file. @@ -114,11 +110,11 @@ Here are the files to process one at a time: After all component PRs are opened for the milestone, create a consolidation PR: 1. Source: `dotnet${DOTNET_VERSION}-${MilestonePrefix}` → Target: `main` -1. Title: `Add release notes for .NET ${DOTNET_VERSION} ${Milestone Label} across various components` -1. Body sections: +2. Title: `Add release notes for .NET ${DOTNET_VERSION} ${Milestone Label} across various components` +3. Body sections: - Intro sentence - Bullet list of component PRs (e.g. `- ASP.NET Core: #`) - CC release management (e.g. `@leecow @rbhanda @victorisr`) -1. Match the structure used previously (see Preview 7 consolidation PR #10006) for consistency. +4. Match the structure used previously (see Preview 7 consolidation PR #10006) for consistency. When adapting for another milestone, update only the branch name, title milestone label, and intro sentence. diff --git a/.github/prompts/scaffoldpreview.prompt.md b/.github/prompts/scaffoldpreview.prompt.md index f68e1c86ca..e01d852bb7 100644 --- a/.github/prompts/scaffoldpreview.prompt.md +++ b/.github/prompts/scaffoldpreview.prompt.md @@ -22,14 +22,14 @@ Example (not baked in): DOTNET_VERSION=10, MILESTONE_KIND=rc, MILESTONE_NUMBER=2 ## Steps 1. Navigate to `release-notes/${DOTNET_VERSION}.0/preview/`. -2. Duplicate the previous milestone folder (prior prefix → new prefix, e.g. `rc1` → `${MilestonePrefix}` or `p6` → `${MilestonePrefix}`). -3. Remove (do NOT copy): - - `api-diff` directory (if present) – will be regenerated later. - - `release.json` – create a fresh one if required by process. -4. For each component markdown file, update the heading and milestone label only; preserve existing anchor structure. -5. If there are no new feature items yet, insert a neutral placeholder sentence (e.g. `This ${Milestone Label} release does not introduce new ${Product} features.`) instead of a generic "Something about the feature" line. Avoid duplicating placeholder lines. -6. Run markdown lint: `npx markdownlint --config .github/linters/.markdown-lint.yml release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}/*.md`. -7. Commit on the base milestone branch (`dotnet${DOTNET_VERSION}-${MilestonePrefix}`) with message: `Scaffold .NET ${DOTNET_VERSION} ${Milestone Label} release notes folder`. +1. Duplicate the previous milestone folder (prior prefix → new prefix, e.g. `rc1` → `${MilestonePrefix}` or `p6` → `${MilestonePrefix}`). +1. Remove (do NOT copy): + - `api-diff` directory (if present) – will be regenerated later. + - `release.json` – create a fresh one if required by process. +1. For each component markdown file, update the heading and milestone label only; preserve existing anchor structure. +1. If there are no new feature items yet, insert a neutral placeholder sentence (e.g. `This ${Milestone Label} release does not introduce new ${Product} features.`) instead of a generic "Something about the feature" line. Avoid duplicating placeholder lines. +1. Run markdown lint: `npx markdownlint --config .github/linters/.markdown-lint.yml release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}/*.md`. +1. Commit on the base milestone branch (`dotnet${DOTNET_VERSION}-${MilestonePrefix}`) with message: `Scaffold .NET ${DOTNET_VERSION} ${Milestone Label} release notes folder`. ## Sample File Template (aspnetcore.md – dynamic) From 888a2bb780aabed6a03443cc85ec0f18124c47a9 Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Fri, 19 Sep 2025 00:41:57 -0700 Subject: [PATCH 04/12] [RC2] F# release notes (#10095) * Update fsharp.md for RC 2 scaffold * Update release-notes/10.0/preview/rc2/fsharp.md --------- Co-authored-by: Tomas Grosup --- release-notes/10.0/preview/rc2/fsharp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-notes/10.0/preview/rc2/fsharp.md b/release-notes/10.0/preview/rc2/fsharp.md index 27e4bdcf1d..d9e6e7ff18 100644 --- a/release-notes/10.0/preview/rc2/fsharp.md +++ b/release-notes/10.0/preview/rc2/fsharp.md @@ -1,3 +1,3 @@ # F# in .NET 10 RC 2 - Release Notes -This RC 2 release does not contain new F# features. View the [What's new in F#](https://fsharp.github.io/fsharp-compiler-docs/release-notes/Language.html) documentation to learn more. +This RC 2 release does not contain new F# language features. View the [What's new in F#](https://fsharp.github.io/fsharp-compiler-docs/release-notes/Language.html) documentation to learn more. From c8097e35d7a556acf628a9d60909606f655d12ba Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Wed, 8 Oct 2025 20:04:34 -0400 Subject: [PATCH 05/12] [RC2] WPF release notes (#10101) * Add RC2 scaffold to WPF release notes * Nothing for WPF * Adjust wording with WinForms and WPF to match --------- Co-authored-by: Andy (Steve) De George <67293991+adegeo@users.noreply.github.com> --- release-notes/10.0/preview/rc2/winforms.md | 4 ++-- release-notes/10.0/preview/rc2/wpf.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/release-notes/10.0/preview/rc2/winforms.md b/release-notes/10.0/preview/rc2/winforms.md index cf3170512e..fc49178f42 100644 --- a/release-notes/10.0/preview/rc2/winforms.md +++ b/release-notes/10.0/preview/rc2/winforms.md @@ -1,7 +1,7 @@ # WinForms .NET 10 RC2 Release Notes -This RC 2 release does not contain new Windows Forms feature additions. +The RC 2 release does not contain new Windows Forms feature additions. -Windows Forms updates in .NET 10: +Key Windows Forms updates in previous releases of .NET 10: - [What's new in Windows Forms](https://learn.microsoft.com/dotnet/desktop/winforms/whats-new/net100) documentation diff --git a/release-notes/10.0/preview/rc2/wpf.md b/release-notes/10.0/preview/rc2/wpf.md index 619679d8f6..73148197c0 100644 --- a/release-notes/10.0/preview/rc2/wpf.md +++ b/release-notes/10.0/preview/rc2/wpf.md @@ -1,7 +1,7 @@ # WPF in .NET 10 RC 2 - Release Notes -This RC 2 release does not contain new WPF features. +The RC 2 release does not contain new WPF feature additions. -WPF updates in .NET 10: +Key WPF updates in previous releases of .NET 10: - [What's new in WPF in .NET 10](https://learn.microsoft.com/dotnet/desktop/wpf/whats-new/net100) documentation From 0223b286051f6731dd789c13f6e8074796c34cbe Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Thu, 9 Oct 2025 14:33:36 -0400 Subject: [PATCH 06/12] [RC2] ASP.NET Core release notes (#10089) --- release-notes/10.0/preview/rc2/aspnetcore.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/release-notes/10.0/preview/rc2/aspnetcore.md b/release-notes/10.0/preview/rc2/aspnetcore.md index c6f542206b..7eae6609b0 100644 --- a/release-notes/10.0/preview/rc2/aspnetcore.md +++ b/release-notes/10.0/preview/rc2/aspnetcore.md @@ -1,14 +1,18 @@ # ASP.NET Core in .NET 10 RC 2 - Release Notes -This RC 2 release does not contain new ASP.NET Core feature additions. +This release was focused on bug fixes and other quality improvements. -ASP.NET Core updates in .NET 10: +ASP.NET Core updates in .NET 10 RC2: -* [What's new in ASP.NET Core in .NET 10](https://learn.microsoft.com/aspnet/core/release-notes/aspnetcore-10.0) documentation. -* [Breaking changes](https://docs.microsoft.com/dotnet/core/compatibility/10.0#aspnet-core) -* [Roadmap](https://aka.ms/aspnet/roadmap) +- [What's new in ASP.NET Core in .NET 10](https://learn.microsoft.com/aspnet/core/release-notes/aspnetcore-10.0) documentation. +- [Breaking changes](https://docs.microsoft.com/dotnet/core/compatibility/10.0#aspnet-core) +- [Roadmap](https://aka.ms/aspnet/roadmap) -.NET 10 RC 2: +.NET 10 RC2: -* [Discussion](https://aka.ms/dotnet/10/rc2) -* [Release notes](README.md) +- [Discussion](https://aka.ms/dotnet/10/rc2) +- [Release notes](README.md) + +## Community contributors + +Thank you everyone who tested and provided feedback on the .NET 10 Release Candidate! From e05e7aa86775346cb995b6a014641726211d1d5b Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Sat, 11 Oct 2025 15:10:49 +0100 Subject: [PATCH 07/12] [RC2] EF Core release notes (#10094) * Update efcore.md for RC 2 scaffold * EF Core release notes for rc.2 --------- Co-authored-by: Shay Rojansky --- release-notes/10.0/preview/rc2/efcore.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/release-notes/10.0/preview/rc2/efcore.md b/release-notes/10.0/preview/rc2/efcore.md index ae1c9afc0c..59ed553da1 100644 --- a/release-notes/10.0/preview/rc2/efcore.md +++ b/release-notes/10.0/preview/rc2/efcore.md @@ -1,8 +1,13 @@ # Entity Framework Core in .NET 10 RC 2 - Release Notes -This RC 2 release does not contain new Entity Framework Core feature additions. +Here's a summary of what's new in Entity Framework Core in this RC 2 release: -Entity Framework Core 10 updates: +- Numerous fixes for [the new EF complex JSON support](https://learn.microsoft.com/ef/core/what-is-new/ef-core-10.0/whatsnew#json). +- [Stop spanning all migrations with a single transaction](https://github.com/dotnet/efcore/issues/35096). +- [Use ExecutionStrategy for query execution (for retrying)](https://github.com/dotnet/efcore/issues/35692). +- [Analyzer warnings for string concatenation in raw SQL APIs](https://learn.microsoft.com/ef/core/what-is-new/ef-core-10.0/whatsnew#warn-for-string-concatenation-with-raw-sql-apis). + +For a full list of changes completed in RC 2, [see this](https://github.com/dotnet/efcore/issues?q=is%3Aissue%20state%3Aclosed%20label%3Arc-2%20milestone%3A10.0.0). - [What's new in Entity Framework Core 10](https://learn.microsoft.com/ef/core/what-is-new/ef-core-10.0/whatsnew) documentation - [Breaking change in Entity Framework Core 10](https://learn.microsoft.com/ef/core/what-is-new/ef-core-10.0/breaking-changes) From 1d5a4d43958a0346b89831257c7ae937f3cfdbf8 Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Mon, 13 Oct 2025 16:39:01 +0100 Subject: [PATCH 08/12] Update libraries.md for RC 2 scaffold (#10096) --- release-notes/10.0/preview/rc2/libraries.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/release-notes/10.0/preview/rc2/libraries.md b/release-notes/10.0/preview/rc2/libraries.md index f4c6e84fa3..cc4aa62755 100644 --- a/release-notes/10.0/preview/rc2/libraries.md +++ b/release-notes/10.0/preview/rc2/libraries.md @@ -1,6 +1,12 @@ # Libraries in .NET 10 RC 2 - Release Notes -This RC 2 release does not contain new Libraries feature additions. +Here's a summary of what's new in Libraries in this RC 2 release: + +- [Feature](#feature) + +## Feature + +Feature summary .NET Libraries updates in .NET 10: From ebc2d8ec554a710af103187714e4bbf553f23f5f Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Mon, 13 Oct 2025 16:40:40 +0100 Subject: [PATCH 09/12] Update runtime.md for RC 2 scaffold (#10097) --- release-notes/10.0/preview/rc2/runtime.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/release-notes/10.0/preview/rc2/runtime.md b/release-notes/10.0/preview/rc2/runtime.md index f760374380..5a06a254f6 100644 --- a/release-notes/10.0/preview/rc2/runtime.md +++ b/release-notes/10.0/preview/rc2/runtime.md @@ -1,15 +1,23 @@ # Runtime updates in .NET 10 Release Candidate 2 +Here's a summary of what's new in Runtime in this RC 2 release: + +- [Feature](#feature) + +## Feature + +Feature summary + This release was focused on quality improvements as we near general availability of .NET 10. It is covered by a go-live license, and we encourage developers today to try it out and provide feedback on anything that you find in your development so we can incorporate any additional enhancements into the final release. Runtime updates in .NET 10 Release Candidate 2: -* [What's new in the .NET Runtime in .NET 10](https://learn.microsoft.com/dotnet/core/whats-new/dotnet-10/overview) documentation -* (Changelog link to be updated when tag is available) +- [What's new in the .NET Runtime in .NET 10](https://learn.microsoft.com/dotnet/core/whats-new/dotnet-10/overview) documentation +- (Changelog link to be updated when tag is available) .NET 10 RC 2: -* [Discussion](https://aka.ms/dotnet/10/rc2) -* [Release notes](README.md) -* [SDK release notes](sdk.md) -* [Libraries release notes](libraries.md) +- [Discussion](https://aka.ms/dotnet/10/rc2) +- [Release notes](README.md) +- [SDK release notes](sdk.md) +- [Libraries release notes](libraries.md) From 569d82659cd21f68eeeb0eea55920ed3d5cafc23 Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Mon, 13 Oct 2025 16:53:49 +0100 Subject: [PATCH 10/12] [RC2] SDK release notes (#10098) * Add RC2 scaffold to SDK release notes and normalize list markers * Add notes for .NET TaskHost * Fix linting --------- Co-authored-by: Chet Husk --- release-notes/10.0/preview/rc2/sdk.md | 103 ++++++++++++++++++++++++-- 1 file changed, 96 insertions(+), 7 deletions(-) diff --git a/release-notes/10.0/preview/rc2/sdk.md b/release-notes/10.0/preview/rc2/sdk.md index d2bf99088b..f4fc6a4d8a 100644 --- a/release-notes/10.0/preview/rc2/sdk.md +++ b/release-notes/10.0/preview/rc2/sdk.md @@ -1,13 +1,102 @@ # SDK in .NET 10 RC 2 - Release Notes -This release was focused on quality improvements as we near general availability of .NET 10. It is covered by a go-live license, and we encourage developers today to try it out and provide feedback on anything that you find in your development so we can incorporate any additional enhancements into the final release. +Here's a summary of what's new in SDK in this RC 2 release: -* [What's new in the .NET Runtime in .NET 10](https://learn.microsoft.com/dotnet/core/whats-new/dotnet-10/overview) documentation -* (Changelog link to be updated when tag is available) +- [Use .NET MSBuild Tasks with .NET Framework MSBuild](#use-net-msbuild-tasks-with-net-framework-msbuild +- [What's new in the .NET Runtime in .NET 10](https://learn.microsoft.com/dotnet/core/whats-new/dotnet-10/overview) documentation +- (Changelog link to be updated when tag is available) .NET 10 RC 2: -* [Discussion](https://aka.ms/dotnet/10/rc2) -* [Release notes](README.md) -* [Runtime release notes](runtime.md) -* [Libraries release notes](libraries.md) +- [Discussion](https://aka.ms/dotnet/10/rc2) +- [Release notes](README.md) +- [Runtime release notes](runtime.md) +- [Libraries release notes](libraries.md) + +## Use .NET MSBuild Tasks with .NET Framework MSBuild + +MSBuild is the underlying build system for .NET, driving both build of projects (as seen in commands like +`dotnet build` and `dotnet pack`), as well as acting as a general provider of information about projects +(as seen in commands like `dotnet list package`, and implicitly used by commands like `dotnet run` to +discover how a project wants to be executed). + +When running `dotnet` CLI commands, the version of MSBuild that is used is the one that is shipped with the .NET SDK. +However, when using Visual Studio, or invoking MSBuild directly, the version of MSBuild that is used is the one that +is installed with Visual Studio. This has a few important differences, the _most_ important of which is that MSBuild +running in Visual Studio (or through `msbuild.exe`) is a .NET Framework application, while MSBuild running in the +`dotnet` CLI is a .NET application. This means that any MSBuild tasks that are written to run on .NET cannot be used +when building in Visual Studio or when using `msbuild.exe`. + +Until this release! Starting with .NET 10, `msbuild.exe` and Visual Studio 2026 will be able to run MSBuild tasks +that are built for .NET. This means that you can now use the same MSBuild tasks when building in Visual Studio or +using `msbuild.exe` as you do when building with the `dotnet` CLI. For most .NET users, this won't change anything, +but for authors of custom MSBuild tasks, this means that you can now write your tasks to target .NET and have them +work everywhere. Our goal with this change is to make it easier to write and share MSBuild tasks, and to allow +task authors to take advantage of the latest features in .NET - in addition to reducing the difficulties around +multi-targeting tasks to support both .NET Framework and .NET, and dealing with versions of .NET Framework dependencies +that are implicitly-available in the MSBuild .NET Framework execution space. + +### Configuring .NET Tasks + +For Task Authors, opting in to this new behavior should be pretty simple - all it should take is changing +your `UsingTask` declaration to tell MSBuild about your Task. + +```xml + +``` + +The `Runtime="NET"` and `TaskFactory="TaskHostFactory"` attributes tell the MSBuild engine how to run the Task: + +- `Runtime="NET"` tells MSBuild that the Task is built for .NET (as opposed to .NET Framework) +- `TaskFactory="TaskHostFactory"` tells MSBuild to use the `TaskHostFactory` to run the Task, which is an existing capability of MSBuild that allows tasks to be run out-of-process. + +### Caveats and performance tuning + +The above example is the simplest way to get started using .NET Tasks in MSBuild, but it has some limitations - +because the `TaskHostFactory` always runs tasks out-of-process, our new .NET Task will always run in a separate +process from MSBuild. This means that there is some minor overhead to running the Task because the MSBuild engine +and the Task communicate over inter-process communication (IPC) instead of in-process communication. For most tasks, +this overhead will be negligible, but for tasks that are run many times in a build, or that do quite a lot of +logging, this overhead may be more significant. + +With just a bit more work, the Task can be configured to still run in-process when running via `dotnet`: + +```xml + + +``` + +Thanks to the `Condition` feature of MSBuild, you can load a Task differently depending on whether MSBuild is running in .NET +Framework (Visual Studio or `msbuild.exe`) or .NET (the `dotnet` CLI). In this example, the Task will run out-of-process when +running in Visual Studio or `msbuild.exe`, but will run in-process when running in the `dotnet` CLI. This gives the best +performance when running in the `dotnet` CLI, while still allowing the Task to be used in Visual Studio and `msbuild.exe`. + +There are also small technical limitations to be aware of when using .NET Tasks in MSBuild - the most notable of which is +that the `Host Object` feature of MSBuild Tasks is not yet supported for .NET Tasks running out-of-process. This means +that if your Task relies on a Host Object, it will not work when running in Visual Studio or `msbuild.exe`. We are actively +working on adding support for Host Objects in future releases. + +### Future work + +This is the first step in a longer journey to make MSBuild more flexible and capable. +In future releases, we plan to add additional capabilities to MSBuild to make it easier to write and use .NET Tasks, including: + +- Automatically discovering and loading .NET Tasks without needing to specify `Runtime` or `TaskFactory` metadata +- Reducing the performance overhead of IPC between the MSBuild Engine and the Tasks when running out-of-process +- Supporting the `Host Object` feature for .NET Tasks running out-of-process + +Task Authors, give this a try and reach out to us with feedback at [dotnet/msbuild](https://github.com/dotnet/msbuild/issues/new). +We're excited to enable a simpler way of working with MSBuild Tasks for everyone (including ourselves)! From 02b745824523719e41635194b5e26d2ea614566b Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Tue, 14 Oct 2025 11:14:47 +0100 Subject: [PATCH 11/12] [RC2] .NET MAUI release notes (#10093) * Update dotnetmaui.md for RC 2 scaffold * Update .NET MAUI release notes for RC 2 This update includes new features and improvements for .NET MAUI in the .NET 10 RC 2 release, such as microphone permission handling, SafeAreaEdges support, and XAML source generation enhancements. * Update release-notes/10.0/preview/rc2/dotnetmaui.md Co-authored-by: Rolf Bjarne Kvinge * Update dotnetmaui.md with Android API 36.1 details Added details about Android API 36.1 bindings, usage instructions, and installation steps. --------- Co-authored-by: David Ortinau Co-authored-by: Rolf Bjarne Kvinge Co-authored-by: Jonathan Peppers --- release-notes/10.0/preview/rc2/dotnetmaui.md | 102 ++++++++++++++++++- 1 file changed, 101 insertions(+), 1 deletion(-) diff --git a/release-notes/10.0/preview/rc2/dotnetmaui.md b/release-notes/10.0/preview/rc2/dotnetmaui.md index 4261cbe3f7..8f0cf25839 100644 --- a/release-notes/10.0/preview/rc2/dotnetmaui.md +++ b/release-notes/10.0/preview/rc2/dotnetmaui.md @@ -1,7 +1,107 @@ # .NET MAUI in .NET 10 RC 2 - Release Notes -This RC 2 release does not contain new .NET MAUI feature additions. +Here's a summary of what's new in .NET MAUI in this RC 2 release: + +- .NET MAUI + - [Microphone permission](#microphone-permission) + - [SafeAreaEdges](#safeareaedges) + - [XAML Source Generation](#xaml-source-generation) +- [.NET for Android](#net-for-android) + - [Android API 36.1](#android-api-36.1) +- [.NET for iOS, Mac Catalyst, macOS, tvOS](#net-for-ios-mac-catalyst-macos-tvos) + - [Xcode 26](#xcode-26) + +## Feature + +Feature summary .NET MAUI updates in .NET 10: - [What's new in .NET MAUI in .NET 10](https://learn.microsoft.com/dotnet/maui/whats-new/dotnet-10) documentation. + +## .NET MAUI + +This release has been focused on stabilizing the SDK. + +### Microphone permission + +We have added the Windows implementation for `Permissions.RequestAsync()` to request and check access permission for the device microphone. + +### SafeAreaEdges + +Support for `SafeAreaEdges` has been added to Android for supporting edge-to-edge and managing content relative to keyboard and unsafe areas of the device display. + +### XAML Source Generation + +This release includes improvements to XAML source generation with notable improvements to debug time view inflation. To enable this in your project add the following to your project file. + +```xml + + SourceGen + +``` + +## .NET for Android + +This release includes continued integration with multiple .NET runtimes, and several bug fixes. + +### Android API 36.1 + +Android API 36.1 bindings are now available thanks to the contribution and collaboration of the [Uno Platform](https://platform.uno/) team. + +To try out the new APIs, you can opt your project into the new `net10.0-android36.1` target framework: + +```xml + + + net10.0-android36.1 + true + +``` + +Note that if omitted, `net10.0-android` will default to API 36.0. `$(EnablePreviewFeatures)` will not be required in future .NET 10 releases. + +To *use* an Android 36.1-only API you can use the `OperatingSystem` class to check the Android version at runtime: + +```csharp +if (OperatingSystem.IsAndroidVersionAtLeast(36, 1)) +{ + // Call some Android 36.1 API here +} +else +{ + // Fallback for older OS versions + ShowToast("Android 36.1+ is required for this feature"); +} +``` + +For a full sample using Android 36.1 APIs, see our [Pdf Annotator sample on GitHub](https://github.com/dotnet/android-samples/tree/main/PdfAnnotator). + +To install the Android 36.1 platform, you can go to **Tools** > **Android** > **Android SDK Manager**. Under the gear icon in the bottom right, change **Repository*** to **Full List**. This allows you to install `Android SDK Platform 36.1`. + +### (Experimental) CoreCLR + +We continue to work on enabling Android apps to run on the CoreCLR runtime (instead of Mono). To use it, add the following to your project file for Android builds: + +```xml + + + false + +``` + +Please try this in your applications and report any issues; when filing feedback, state that you are using UseMonoRuntime=false. Expect that application size is currently larger than with Mono and that debugging and some runtime diagnostics are not fully functional yet; these areas are actively being improved. This is an experimental feature and not intended for production use. + +A detailed list of Android changes can be found on the [dotnet/android GitHub releases](https://github.com/dotnet/android/releases/). + +## .NET for iOS, Mac Catalyst, macOS, tvOS + +This release includes continued integration with multiple .NET runtimes, and several bug fixes. + +### Xcode 26 + +Xcode 26 bindings have been updated and are available now for both for targeting .NET 9 and .NET 10 RC2. This is compatible with Xcode 26.0 and 26.1. + +## Contributors + +Thank you contributors! ❤️ From 1c06d9dea484c1d8e3656a118a7934292dd3483a Mon Sep 17 00:00:00 2001 From: James Montemagno Date: Tue, 14 Oct 2025 13:45:55 +0100 Subject: [PATCH 12/12] Update release-notes/10.0/preview/rc2/README.md --- release-notes/10.0/preview/rc2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-notes/10.0/preview/rc2/README.md b/release-notes/10.0/preview/rc2/README.md index f99488a4c6..b188e9b83b 100644 --- a/release-notes/10.0/preview/rc2/README.md +++ b/release-notes/10.0/preview/rc2/README.md @@ -1,6 +1,6 @@ # .NET 10 RC 2 - Release Notes -.NET 10 RC 2 released on . Find more information on new features released in .NET 10 RC 2 by browsing through the release notes below: +.NET 10 RC 2 released on October 14th, 2025. Find more information on new features released in .NET 10 RC 2 by browsing through the release notes below: - [Libraries](./libraries.md) - [Runtime](./runtime.md)