diff --git a/.github/prompts/createprs-for-preview.prompt.md b/.github/prompts/createprs-for-preview.prompt.md index 2636924be0..95552281e7 100644 --- a/.github/prompts/createprs-for-preview.prompt.md +++ b/.github/prompts/createprs-for-preview.prompt.md @@ -1,62 +1,94 @@ -# 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: -- Title: `Update {name} for RC 1` -- Body: `Please update the release notes here as needed for RC 1.\n\n/cc @{assignees}` +- DOTNET_VERSION (major) – e.g. 10 +- MILESTONE_KIND – `preview` or `rc` +- MILESTONE_NUMBER – preview: 1–7, rc: 1–2 -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. +Derived (logic performed mentally / by assistant at run time): -Notes: +- 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) -- All RC 1 release notes are in the `release-notes/10.0/preview/rc1/` directory. +Example (NOT to be edited into the file): DOTNET_VERSION=10, MILESTONE_KIND=rc, MILESTONE_NUMBER=2 ⇒ label `RC 2`, prefix `rc2`. + +## 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 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}` 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. + +## 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 +107,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` +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`) +4. 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..e01d852bb7 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/`. +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) + +```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 index b4b5a2bd54..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 October 14, 2025. 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) 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..7eae6609b0 --- /dev/null +++ b/release-notes/10.0/preview/rc2/aspnetcore.md @@ -0,0 +1,18 @@ +# ASP.NET Core in .NET 10 RC 2 - Release Notes + +This release was focused on bug fixes and other quality improvements. + +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) + +.NET 10 RC2: + +- [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! 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..8f0cf25839 --- /dev/null +++ b/release-notes/10.0/preview/rc2/dotnetmaui.md @@ -0,0 +1,107 @@ +# .NET MAUI in .NET 10 RC 2 - Release Notes + +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! ❤️ 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..59ed553da1 --- /dev/null +++ b/release-notes/10.0/preview/rc2/efcore.md @@ -0,0 +1,13 @@ +# Entity Framework Core in .NET 10 RC 2 - Release Notes + +Here's a summary of what's new in Entity Framework Core in this RC 2 release: + +- 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) 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..d9e6e7ff18 --- /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# language 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..cc4aa62755 --- /dev/null +++ b/release-notes/10.0/preview/rc2/libraries.md @@ -0,0 +1,13 @@ +# Libraries in .NET 10 RC 2 - Release Notes + +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: + +- [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..5a06a254f6 --- /dev/null +++ b/release-notes/10.0/preview/rc2/runtime.md @@ -0,0 +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) + +.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..f4fc6a4d8a --- /dev/null +++ b/release-notes/10.0/preview/rc2/sdk.md @@ -0,0 +1,102 @@ +# SDK in .NET 10 RC 2 - Release Notes + +Here's a summary of what's new in SDK in this RC 2 release: + +- [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) + +## 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)! 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..fc49178f42 --- /dev/null +++ b/release-notes/10.0/preview/rc2/winforms.md @@ -0,0 +1,7 @@ +# WinForms .NET 10 RC2 Release Notes + +The RC 2 release does not contain new Windows Forms feature additions. + +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 new file mode 100644 index 0000000000..73148197c0 --- /dev/null +++ b/release-notes/10.0/preview/rc2/wpf.md @@ -0,0 +1,7 @@ +# WPF in .NET 10 RC 2 - Release Notes + +The RC 2 release does not contain new WPF feature additions. + +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