diff --git a/.openpublishing.redirection.core.json b/.openpublishing.redirection.core.json
index 206357fa44f2e..225cad1072d97 100644
--- a/.openpublishing.redirection.core.json
+++ b/.openpublishing.redirection.core.json
@@ -1925,11 +1925,6 @@
"source_path_from_root": "/docs/core/testing/unit-testing-platform-diagnostics.md",
"redirect_url": "/dotnet/core/testing/microsoft-testing-platform-crash-hang-dumps"
},
- {
- "source_path_from_root": "/docs/core/testing/microsoft-testing-platform-diagnostics.md",
- "redirect_url": "/dotnet/core/testing/microsoft-testing-platform-crash-hang-dumps",
- "redirect_document_id": false
- },
{
"source_path_from_root": "/docs/core/testing/unit-testing-platform-exit-codes.md",
"redirect_url": "/dotnet/core/testing/microsoft-testing-platform-troubleshooting#exit-codes"
diff --git a/docs/ai/dotnet-ai-ecosystem.md b/docs/ai/dotnet-ai-ecosystem.md
index 6d304d817bd65..7074cf980ca59 100644
--- a/docs/ai/dotnet-ai-ecosystem.md
+++ b/docs/ai/dotnet-ai-ecosystem.md
@@ -3,6 +3,7 @@ title: .NET + AI ecosystem tools and SDKs
description: This article provides an overview of the ecosystem of SDKs and tools available to .NET developers integrating AI into their applications.
ms.date: 04/15/2026
ms.topic: overview
+ai-usage: ai-assisted
---
# .NET + AI ecosystem tools and SDKs
@@ -19,8 +20,8 @@ The following table recommends which technology to use based on different object
| **Work with your own data** | Use [Microsoft.Extensions.DataIngestion (MEDI)](#microsoftextensionsdataingestion-medi) to read, chunk, or enrich content. Then use [Microsoft.Extensions.VectorData (MEVD)](#microsoftextensionsvectordata-mevd) to store and retrieve vectors. |
| **Share or consume capabilities across AI clients** | Use an [MCP Server](#mcp-server) to publish capabilities, or an [MCP Client](#mcp-client) to consume them. |
| **Build an agentic system** | Use [Copilot SDK](#copilot-sdk) for a ready-made harness, or [Microsoft Agent Framework](#microsoft-agent-framework-maf) for multi-step goal pursuit, routing, or handoffs. |
-| **Choose a hosting or execution model** | Use [Azure AI Foundry](#azure-ai-foundry) for managed cloud, [Foundry Local](#foundry-local) for local-first or privacy-sensitive execution, and [Aspire](#aspire) for distributed multi-service systems. |
-| **Improve the developer workflow** | Use [AI Toolkit](#ai-toolkit). |
+| **Choose a hosting or execution model** | Use [Microsoft Foundry](#microsoft-foundry) for managed cloud, [Foundry Local](#foundry-local) for local-first or privacy-sensitive execution, and [Aspire](#aspire) for distributed multi-service systems. |
+| **Improve the developer workflow** | Use [Foundry Toolkit](#foundry-toolkit). |
Most production AI applications combine several components:
@@ -28,8 +29,8 @@ Most production AI applications combine several components:
- **RAG application**: MEDI + MEVD + MEAI
- **Multi-agent system**: MEAI + MAF + Aspire
- **Tool interoperability**: MEAI + MCP Server + MCP Client
-- **Enterprise cloud app**: MEAI + Azure AI Foundry + Aspire
-- **Local-first app**: MEAI + Foundry Local + AI Toolkit (development)
+- **Enterprise cloud app**: MEAI + Microsoft Foundry + Aspire
+- **Local-first app**: MEAI + Foundry Local + Foundry Toolkit (development)
Use these practical rules to choose quickly:
@@ -97,13 +98,13 @@ Not every AI feature needs MAF. If a direct MEAI call or a simple tool-calling l
For more information, see [Microsoft Agent Framework overview](/agent-framework/overview/agent-framework-overview).
-## AI Toolkit
+## Foundry Toolkit
-AI Toolkit is a VS Code extension pack for AI development that speeds up experimentation with models, prompts, agents, and evaluations.
+Foundry Toolkit is a VS Code extension pack for AI development that speeds up experimentation with models, prompts, agents, and evaluations.
-AI Toolkit isn't the core runtime architecture for the production app. It complements MEAI, Evaluations, and Foundry Local.
+Foundry Toolkit isn't the core runtime architecture for the production app. It complements MEAI, Evaluations, and Foundry Local.
-For more information, see [AI Toolkit for Visual Studio Code](https://code.visualstudio.com/docs/intelligentapps/overview).
+For more information, see [Foundry Toolkit for Visual Studio Code](https://code.visualstudio.com/docs/intelligentapps/overview).
## Copilot SDK
@@ -113,13 +114,13 @@ Copilot SDK is more opinionated and prewired than MEAI. If your goal is a fully
For more information, see the [Copilot SDK repository](https://github.com/github/copilot-sdk).
-## Azure AI Foundry
+## Microsoft Foundry
-Azure AI Foundry is the managed cloud platform layer for enterprise AI solutions, with two primary functions: model management and hosted agents.
+Microsoft Foundry is the managed cloud platform layer for enterprise AI solutions, with two primary functions: model management and hosted agents.
-Azure AI Foundry isn't the app-facing programming abstraction; MEAI still plays that role in .NET code. Azure AI Foundry becomes the right lead when the real question is *where* the model runs and under what controls.
+Microsoft Foundry isn't the app-facing programming abstraction; MEAI still plays that role in .NET code. Microsoft Foundry becomes the right lead when the real question is *where* the model runs and under what controls.
-For more information, see the [Azure AI Foundry documentation](/azure/ai-foundry/).
+For more information, see the [Microsoft Foundry documentation](/azure/ai-foundry/).
## Foundry Local
@@ -135,6 +136,6 @@ Aspire is the orchestration, service-wiring, and observability layer for distrib
AI systems often stop being "just one app" once retrieval, tools, gateways, and worker services are involved. Aspire helps teams keep those parts understandable and observable, and its visuals make it easier to trace AI flows across services.
-Aspire isn't specifically the AI runtime; it's the multi-service application layer around it. It doesn't replace MEAI, MAF, or Azure AI Foundry.
+Aspire isn't specifically the AI runtime; it's the multi-service application layer around it. It doesn't replace MEAI, MAF, or Microsoft Foundry.
For more information, see the [Aspire documentation](https://aspire.dev/).
diff --git a/docs/azure/migration/choose.md b/docs/azure/migration/choose.md
index a4b5e2a0c01be..a18c7cb05962e 100644
--- a/docs/azure/migration/choose.md
+++ b/docs/azure/migration/choose.md
@@ -2,7 +2,6 @@
title: Choose the right Azure hosting option
description: Learn which Azure migration path is right for your ASP.NET web application.
author: CESARDELATORRE
-ms.author: cesardl
ms.date: 12/14/2023
---
diff --git a/docs/core/testing/microsoft-testing-platform-diagnostics.md b/docs/core/testing/microsoft-testing-platform-diagnostics.md
new file mode 100644
index 0000000000000..a4f204c6945ef
--- /dev/null
+++ b/docs/core/testing/microsoft-testing-platform-diagnostics.md
@@ -0,0 +1,42 @@
+---
+title: Microsoft.Testing.Platform (MTP) diagnostics
+description: Learn about the MTP extensions that capture evidence, such as screen recordings, to help you diagnose a test run.
+author: evangelink
+ms.author: amauryleve
+ms.date: 07/09/2026
+ai-usage: ai-assisted
+---
+
+# Diagnostics
+
+These extensions capture evidence during a test run so you can diagnose failures after the fact. Each extension requires an additional NuGet package, as described in each section.
+
+> [!TIP]
+> When using [Microsoft.Testing.Platform.MSBuild](https://www.nuget.org/packages/Microsoft.Testing.Platform.MSBuild) (included transitively by MSTest, NUnit, and xUnit runners), these extensions are auto-registered when you install their NuGet packages — no code changes needed. The manual registration specified in this article is only required if you disabled the auto-generated entry point by setting `false`.
+
+For process-level diagnostics, see the related [Crash and hang dumps](microsoft-testing-platform-crash-hang-dumps.md) extensions, which collect process dump files when the test host crashes or hangs.
+
+## Video recorder
+
+The video recorder records the screen while your tests run and attaches the captured videos to the test session as artifacts. Recording is opt-in per run and driven by an external `ffmpeg` process, which must be available on the `PATH` or set through an explicit path. This extension requires the [Microsoft.Testing.Extensions.VideoRecorder](https://nuget.org/packages/Microsoft.Testing.Extensions.VideoRecorder) NuGet package.
+
+> [!NOTE]
+> Available in MTP starting with version 2.3.0. This extension is experimental, and its options and output format might change in a future version.
+
+### Manual registration
+
+```csharp
+var builder = await TestApplication.CreateBuilderAsync(args);
+builder.AddVideoRecorderProvider();
+```
+
+### Options
+
+| Option | MTP version | Description |
+|---|---|---|
+| `--capture-video` | 2.3.0 | Enables screen recording. The optional value controls retention: `on-failure` (default) keeps footage only for failing tests, and `always` keeps footage for every test. |
+| `--capture-video-source` | 2.3.0 | Sets the capture source. Valid values are `screen` (default) and `window`. Requires `--capture-video`. |
+| `--capture-video-granularity` | 2.3.0 | Sets whether the recorder produces one video per test or one chaptered video for the whole run. Valid values are `test` (default) and `session`. Requires `--capture-video`. |
+| `--capture-video-max-duration` | 2.3.0 | Bounds disk usage on long runs by keeping approximately the last N seconds of footage. The value is a positive integer number of seconds. Requires `--capture-video`. |
+| `--capture-video-chapters` | 2.3.0 | Sets whether chapter bookmarks are added to the per-session video. Valid values are `on` (default) and `off`. Requires `--capture-video`. |
+| `--capture-video-args` | 2.3.0 | Passes extra arguments to the underlying recorder (`ffmpeg`). Requires `--capture-video`. |
diff --git a/docs/core/testing/microsoft-testing-platform-extensions-integration.md b/docs/core/testing/microsoft-testing-platform-extensions-integration.md
new file mode 100644
index 0000000000000..7d03f4db92ef0
--- /dev/null
+++ b/docs/core/testing/microsoft-testing-platform-extensions-integration.md
@@ -0,0 +1,31 @@
+---
+title: Microsoft.Testing.Platform (MTP) Microsoft.Extensions integration
+description: Learn about the MTP extensions that bridge Microsoft.Testing.Platform to the Microsoft.Extensions.* libraries your application already uses.
+author: evangelink
+ms.author: amauryleve
+ms.date: 07/09/2026
+ai-usage: ai-assisted
+---
+
+# Microsoft.Extensions integration
+
+These extensions bridge Microsoft.Testing.Platform (MTP) to the `Microsoft.Extensions.*` libraries your application already uses, so platform and extension components flow through the same infrastructure as the rest of your code. Each extension requires an additional NuGet package, as described in each section.
+
+> [!TIP]
+> When using [Microsoft.Testing.Platform.MSBuild](https://www.nuget.org/packages/Microsoft.Testing.Platform.MSBuild) (included transitively by MSTest, NUnit, and xUnit runners), these extensions are auto-registered when you install their NuGet packages — no code changes needed. The manual registration specified in this article is only required if you disabled the auto-generated entry point by setting `false`.
+
+## Logging bridge
+
+The logging bridge forwards Microsoft.Testing.Platform diagnostic logs to , so platform and extension logs flow through the same `Microsoft.Extensions.Logging` pipeline your application already uses. You can reuse an existing logging stack — Console, Debug, Serilog, Application Insights, OpenTelemetry, or a custom `ILoggerProvider` — without writing a custom MTP logger provider. This extension requires the [Microsoft.Testing.Extensions.Logging](https://nuget.org/packages/Microsoft.Testing.Extensions.Logging) NuGet package.
+
+> [!NOTE]
+> Available in MTP starting with version 2.3.0. This extension is experimental, and its options and output format might change in a future version.
+
+The bridge forwards each message only when the platform's diagnostic logging is enabled. When the platform's effective log level is `None` (the default, unless you pass [`--diagnostic`](microsoft-testing-platform-cli-options.md)), the configuration delegate isn't invoked and no logger factory is created. Per-category filters that you set in the `ILoggingBuilder` can narrow the platform's effective diagnostic level, but they can't widen it.
+
+### Manual registration
+
+```csharp
+var builder = await TestApplication.CreateBuilderAsync(args);
+builder.AddMicrosoftExtensionsLogging(logging => logging.AddConsole());
+```
diff --git a/docs/core/testing/microsoft-testing-platform-features.md b/docs/core/testing/microsoft-testing-platform-features.md
index 93a3a2f87d489..8aeab51c02d70 100644
--- a/docs/core/testing/microsoft-testing-platform-features.md
+++ b/docs/core/testing/microsoft-testing-platform-features.md
@@ -34,6 +34,9 @@ Use the following path based on your goal:
- Need GitHub Actions-native output (log groups, annotations, and job summary): [GitHub Actions report](./microsoft-testing-platform-test-reports.md#github-actions-reports) (extension, experimental)
- Need coverage data: [Code coverage](./microsoft-testing-platform-code-coverage.md) (extension)
- Need crash or hang diagnostics: [Crash and hang dumps](./microsoft-testing-platform-crash-hang-dumps.md) (extension)
+- Need to record the screen during a run: [Diagnostics](./microsoft-testing-platform-diagnostics.md) (extension, experimental)
+- Need to deploy and launch a packaged-app test host: [Test host deployment](./microsoft-testing-platform-test-host-deployment.md) (extension, experimental)
+- Need to route platform logs through `Microsoft.Extensions.Logging`: [Microsoft.Extensions integration](./microsoft-testing-platform-extensions-integration.md) (extension, experimental)
- Need to retry failed tests: [Retry](./microsoft-testing-platform-retry.md#retry) (extension)
- Need hot reload support: [Hot Reload](./microsoft-testing-platform-hot-reload.md) (extension)
- Need Microsoft Fakes support: [Microsoft Fakes](./microsoft-testing-platform-fakes.md) (extension)
@@ -84,23 +87,14 @@ Run tests that use Microsoft Fakes for stubs and shims.
Telemetry collection. Learn how to opt out and what data is collected.
-**[Video recorder](https://www.nuget.org/packages/Microsoft.Testing.Extensions.VideoRecorder)** (experimental, introduced in MTP 2.3.0)
+**[Diagnostics](./microsoft-testing-platform-diagnostics.md)** (experimental, introduced in MTP 2.3.0)
-Record the screen during a test run. It requires `ffmpeg` to be available on the machine and is enabled with the `--capture-video` option. Register it manually with `builder.AddVideoRecorderProvider()`.
+Capture evidence to diagnose a run, such as recording the screen with the video recorder.
-**[Packaged app deployment](https://www.nuget.org/packages/Microsoft.Testing.Extensions.PackagedApp)** (experimental, introduced in MTP 2.3.0)
+**[Test host deployment](./microsoft-testing-platform-test-host-deployment.md)** (experimental, introduced in MTP 2.3.0)
-A reference extension that uses the experimental `ITestHostLauncher` extension point to deploy and launch a packaged-app test host. Register it manually with `builder.AddPackagedAppDeployment()`.
+Control how and where the test host is deployed and launched, such as deploying and launching a packaged-app test host.
-## Microsoft.Extensions integration
+**[Microsoft.Extensions integration](./microsoft-testing-platform-extensions-integration.md)** (experimental, introduced in MTP 2.3.0)
-These extensions bridge Microsoft.Testing.Platform to the `Microsoft.Extensions.*` libraries your application already uses.
-
-**[Logging bridge](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Logging)** (experimental, introduced in MTP 2.3.0)
-
-The Microsoft.Testing.Extensions.Logging package bridges Microsoft.Testing.Platform diagnostics to , so platform and extension logs flow through the same `Microsoft.Extensions.Logging` pipeline your application already uses. Register it manually with the following call:
-
-```csharp
-var builder = await TestApplication.CreateBuilderAsync(args);
-builder.AddMicrosoftExtensionsLogging(logging => logging.AddConsole());
-```
+Bridge platform and extension diagnostics into the `Microsoft.Extensions.*` libraries your application already uses, such as forwarding logs through the `Microsoft.Extensions.Logging` pipeline.
diff --git a/docs/core/testing/microsoft-testing-platform-test-host-deployment.md b/docs/core/testing/microsoft-testing-platform-test-host-deployment.md
new file mode 100644
index 0000000000000..1413e06fe0a27
--- /dev/null
+++ b/docs/core/testing/microsoft-testing-platform-test-host-deployment.md
@@ -0,0 +1,29 @@
+---
+title: Microsoft.Testing.Platform (MTP) test host deployment
+description: Learn about the MTP extensions that control how and where the test host is deployed and launched.
+author: evangelink
+ms.author: amauryleve
+ms.date: 07/09/2026
+ai-usage: ai-assisted
+---
+
+# Test host deployment
+
+These extensions control how and where the test host is deployed and launched. They build on the experimental `ITestHostLauncher` extension point, which lets an extension take over the deployment and launch of the test host instead of starting it in place. Each extension requires an additional NuGet package, as described in each section.
+
+> [!TIP]
+> When using [Microsoft.Testing.Platform.MSBuild](https://www.nuget.org/packages/Microsoft.Testing.Platform.MSBuild) (included transitively by MSTest, NUnit, and xUnit runners), these extensions are auto-registered when you install their NuGet packages — no code changes needed. The manual registration specified in this article is only required if you disabled the auto-generated entry point by setting `false`.
+
+## Packaged app deployment
+
+The packaged app deployment extension deploys a packaged Windows test host (UWP or packaged WinUI) into an isolated directory and launches it from there, rather than starting the test host in place. It's the reference consumer of the experimental `ITestHostLauncher` extension point for packaged Windows apps. This extension requires the [Microsoft.Testing.Extensions.PackagedApp](https://nuget.org/packages/Microsoft.Testing.Extensions.PackagedApp) NuGet package.
+
+> [!NOTE]
+> Available in MTP starting with version 2.3.0. This extension is experimental, and its options and output format might change in a future version.
+
+### Manual registration
+
+```csharp
+var builder = await TestApplication.CreateBuilderAsync(args);
+builder.AddPackagedAppDeployment();
+```
diff --git a/docs/core/tools/custom-templates.md b/docs/core/tools/custom-templates.md
index a35edbdee2ba0..8d9b73a116d18 100644
--- a/docs/core/tools/custom-templates.md
+++ b/docs/core/tools/custom-templates.md
@@ -52,7 +52,7 @@ The *template.json* file is placed in a *.template.config* folder in the root di
| Member | Type | Description |
| ----------------- | ------------- | ----------- |
-| `$schema` | URI | The JSON schema for the *template.json* file. Editors that support JSON schemas enable JSON-editing features when the schema is specified. For example, [Visual Studio Code](https://code.visualstudio.com/) requires this member to enable IntelliSense. Use a value of `http://json.schemastore.org/template`. |
+| `$schema` | URI | The JSON schema for the *template.json* file. Editors that support JSON schemas enable JSON-editing features when the schema is specified. For example, [Visual Studio Code](https://code.visualstudio.com/) requires this member to enable IntelliSense. Use a value of `https://json.schemastore.org/template`. |
| `author` | string | The author of the template. |
| `classifications` | array(string) | Zero or more characteristics of the template that a user might use to find the template when searching for it. The classifications also appear in the *Tags* column when it appears in a list of templates produced by using the `dotnet new list` command. |
| `identity` | string | A unique name for this template. |
@@ -61,7 +61,7 @@ The *template.json* file is placed in a *.template.config* folder in the root di
| `sourceName` | string | The name in the source tree to replace with the name the user specifies. The template engine will look for any occurrence of the `sourceName` mentioned in the config file and replace it in file names and file contents. The value to be replaced with can be given using the `-n` or `--name` options while running a template. If no name is specified, the current directory is used.|
| `preferNameDirectory` | Boolean | Indicates whether to create a directory for the template if name is specified but an output directory isn't set (instead of creating the content directly in the current directory). The default value is false.|
-The full schema for the *template.json* file is found at the [JSON Schema Store](http://json.schemastore.org/template). For more information about the *template.json* file, see the [dotnet templating wiki](https://github.com/dotnet/templating/wiki). For deeper examples and information on how to make your templates visible in Visual Studio, check out the [resources that Sayed Hashimi has created](https://github.com/sayedihashimi/template-sample).
+The full schema for the *template.json* file is found at the [JSON Schema Store](https://www.schemastore.org). For more information about the *template.json* file, see the [dotnet templating wiki](https://github.com/dotnet/templating/wiki). For deeper examples and information on how to make your templates visible in Visual Studio, check out the [resources that Sayed Hashimi has created](https://github.com/sayedihashimi/template-sample).
#### Example
@@ -80,7 +80,7 @@ The *template.json* file looks like the following:
```json
{
- "$schema": "http://json.schemastore.org/template",
+ "$schema": "https://json.schemastore.org/template",
"author": "Travis Chau",
"classifications": [ "Common", "Console" ],
"identity": "AdatumCorporation.ConsoleTemplate.CSharp",
@@ -123,7 +123,7 @@ For example, here's *template.json* file with some localizable fields:
```JSON
{
- "$schema": "http://json.schemastore.org/template",
+ "$schema": "https://json.schemastore.org/template",
"author": "Microsoft",
"classifications": "Config",
"name": "EditorConfig file",
@@ -322,4 +322,4 @@ dotnet new
- [dotnet/templating GitHub repo Wiki](https://github.com/dotnet/templating/wiki)
- [Template samples](https://aka.ms/template-samples)
- [How to create your own templates for dotnet new](https://devblogs.microsoft.com/dotnet/how-to-create-your-own-templates-for-dotnet-new/)
-- [*template.json* schema at the JSON Schema Store](http://json.schemastore.org/template)
+- [*template.json* schema at the JSON Schema Store](https://www.schemastore.org)
diff --git a/docs/csharp/advanced-topics/interface-implementation/static-virtual-interface-members.md b/docs/csharp/advanced-topics/interface-implementation/static-virtual-interface-members.md
index e9ddebc017f3e..33f20a356356b 100644
--- a/docs/csharp/advanced-topics/interface-implementation/static-virtual-interface-members.md
+++ b/docs/csharp/advanced-topics/interface-implementation/static-virtual-interface-members.md
@@ -71,7 +71,7 @@ This small example demonstrates the motivation for this feature. You can use nat
The previous example used `static abstract` to declare the `++` operator: every implementing type *must* provide its own implementation. You can also declare `static virtual` members that provide a default implementation. Implementing types can use the default or override it. This distinction is useful when there's a reasonable default that works for most types, but some types need specialized behavior.
-The following example defines an `IDescribable` interface with a `static abstract` property, `TypeName`, and a `static virtual` method, `Describe()`. The `TypeName` property is abstract because each type must supply its own name. The `Describe()` method is virtual because returning the type name is a sensisble default for most types:
+The following example defines an `IDescribable` interface with a `static abstract` property, `TypeName`, and a `static virtual` method, `Describe()`. The `TypeName` property is abstract because each type must supply its own name. The `Describe()` method is virtual because returning the type name is a sensible default for most types:
:::code language="csharp" source="./snippets/staticinterfaces/Describable.cs" id="Describable":::
diff --git a/docs/csharp/fundamentals/coding-style/identifier-names.md b/docs/csharp/fundamentals/coding-style/identifier-names.md
index b5dd421dad868..5f9b0d1ced0da 100644
--- a/docs/csharp/fundamentals/coding-style/identifier-names.md
+++ b/docs/csharp/fundamentals/coding-style/identifier-names.md
@@ -37,9 +37,9 @@ By convention, C# programs use `PascalCase` for type names, namespaces, and all
- Use meaningful and descriptive names for variables, methods, and classes.
- Prefer clarity over brevity.
- Use PascalCase for class names and method names.
-- Use camelCase for method arguments, local variables, and private fields.
-- Use PascalCase for constant names, both fields and local constants.
-- Private instance fields start with an underscore (`_`).
+- Use camelCase for method arguments, local variables, and private and internal non-constant fields.
+- Private and internal non-constant instance fields start with an underscore (`_`).
+- To maintain consistency across all access modifiers, use PascalCase for constant names, both fields and local constants, including `private` and `internal` constants.
- Static fields start with `s_`. This convention isn't the default Visual Studio behavior, nor part of the [Framework design guidelines](../../../standard/design-guidelines/names-of-type-members.md#names-of-fields), but is [configurable in editorconfig](../../../fundamentals/code-analysis/style-rules/naming-rules.md).
- Avoid using abbreviations or acronyms in names, except for widely known and accepted abbreviations.
- Use meaningful and descriptive namespaces that follow the reverse domain name notation.
@@ -130,7 +130,7 @@ For more information on positional records, see [Positional syntax for property
### Camel case
-Use camel casing ("camelCasing") when naming `private` or `internal` fields and prefix them with `_`. Use camel casing when naming local variables, including instances of a delegate type.
+Use camel casing ("camelCasing") when naming `private` or `internal` non-constant fields, and prefix them with `_`. Use camel casing when naming local variables, including instances of a delegate type.
```csharp
public class DataService
diff --git a/docs/csharp/language-reference/keywords/snippets/csrefKeywordsModifiers.cs b/docs/csharp/language-reference/keywords/snippets/csrefKeywordsModifiers.cs
index 7c058a3e6ab73..e1bb160af7fe5 100644
--- a/docs/csharp/language-reference/keywords/snippets/csrefKeywordsModifiers.cs
+++ b/docs/csharp/language-reference/keywords/snippets/csrefKeywordsModifiers.cs
@@ -177,27 +177,27 @@ public class ConstTest
{
class SampleClass
{
- public int x;
- public int y;
+ public int X;
+ public int Y;
public const int C1 = 5;
public const int C2 = C1 + 5;
public SampleClass(int p1, int p2)
{
- x = p1;
- y = p2;
+ X = p1;
+ Y = p2;
}
}
static void Main()
{
var mC = new SampleClass(11, 22);
- Console.WriteLine($"x = {mC.x}, y = {mC.y}");
+ Console.WriteLine($"X = {mC.X}, Y = {mC.Y}");
Console.WriteLine($"C1 = {SampleClass.C1}, C2 = {SampleClass.C2}");
}
}
/* Output
- x = 11, y = 22
+ X = 11, Y = 22
C1 = 5, C2 = 10
*/
//
diff --git a/docs/framework/release-notes/2026/05-26-may-cumulative-update-preview.md b/docs/framework/release-notes/2026/05-26-may-cumulative-update-preview.md
new file mode 100644
index 0000000000000..e93d8d7edab56
--- /dev/null
+++ b/docs/framework/release-notes/2026/05-26-may-cumulative-update-preview.md
@@ -0,0 +1,46 @@
+---
+title: May 2026 cumulative update preview
+description: Learn about the improvements in the .NET Framework May 2026 cumulative update preview.
+ms.date: 05/26/2026
+---
+# May 2026 cumulative update preview
+
+_Released May 26, 2026_
+
+## Summary of what's new in this release
+
+- [Security improvements](#security-improvements)
+- [Quality and reliability improvements](#quality-and-reliability-improvements)
+
+### Security improvements
+
+There are no new security improvements in this release. This update is cumulative and contains all previously released security improvements.
+
+### Quality and reliability improvements
+
+#### .NET libraries
+
+Addresses an issue with synchronous `HttpWebRequest` connections where requests could hang in specific secure connection scenarios with certain server configurations.
+
+#### .NET Runtime
+
+- Addresses an issue in the Visual Studio x86 native debugger where certain floating-point values could be reported incorrectly during step operations in mixed-code applications.
+
+## Known issues in this release
+
+This release contains no known issues.
+
+## Summary tables
+
+The following table outlines the updates in this release.
+
+| Product version | Cumulative update preview |
+| --- | --- |
+| **Windows 11, version 26H1** | |
+| .NET Framework 4.8.1 | [5092431](https://support.microsoft.com/kb/5092431) |
+| **Windows 11, version 25H2** | |
+| .NET Framework 3.5, 4.8.1 | [5092427](https://support.microsoft.com/kb/5092427) |
+| **Windows 11, version 24H2** | |
+| .NET Framework 3.5, 4.8.1 | [5092430](https://support.microsoft.com/kb/5092430) |
+
+The operating system row lists a KB that's used for update offering purposes. When the operating system KB is offered, the applicability logic determines the specific .NET Framework update(s) installed. Updates for individual .NET Framework versions are installed based on the version of .NET Framework that is already present on the device. Because of this, the operating system KB is not expected to be listed as installed updates on the device. The expected updates installed are the .NET Framework-specific version updates listed in the previous table.
diff --git a/docs/framework/release-notes/2026/07-14-july-cumulative-update.md b/docs/framework/release-notes/2026/07-14-july-cumulative-update.md
new file mode 100644
index 0000000000000..378648c0d2c83
--- /dev/null
+++ b/docs/framework/release-notes/2026/07-14-july-cumulative-update.md
@@ -0,0 +1,156 @@
+---
+title: July 2026 cumulative update
+description: Learn about the improvements in the .NET Framework July 2026 cumulative update.
+ms.date: 07/14/2026
+---
+# July 2026 cumulative update
+
+_Released July 14, 2026_
+
+## Summary of what's new in this release
+
+- [Security improvements](#security-improvements)
+- [Quality and reliability improvements](#quality-and-reliability-improvements)
+
+### Security improvements
+
+#### CVE-2026-47302 – .NET Framework Denial of Service vulnerability
+
+This security update addresses a denial of service vulnerability detailed in [CVE-2026-47302](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-47302).
+
+#### CVE-2026-47304 – .NET Framework Security Feature Bypass vulnerability
+
+This security update addresses a security feature bypass vulnerability detailed in [CVE-2026-47304](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-47304).
+
+#### CVE-2026-50304 – .NET Framework Denial of Service vulnerability
+
+This security update addresses a denial of service vulnerability detailed in [CVE-2026-50304](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50304).
+
+#### CVE-2026-50324 – .NET Framework Denial of Service vulnerability
+
+This security update addresses a denial of service vulnerability detailed in [CVE-2026-50324](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50324).
+
+#### CVE-2026-50355 – .NET Framework Denial of Service vulnerability
+
+This security update addresses a denial of service vulnerability detailed in [CVE-2026-50355](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50355).
+
+#### CVE-2026-50368 – .NET Framework Denial of Service vulnerability
+
+This security update addresses a denial of service vulnerability detailed in [CVE-2026-50368](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50368).
+
+#### CVE-2026-50411 – .NET Framework Denial of Service vulnerability
+
+This security update addresses a denial of service vulnerability detailed in [CVE-2026-50411](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50411).
+
+#### CVE-2026-50525 – .NET Framework Denial of Service vulnerability
+
+This security update addresses a denial of service vulnerability detailed in [CVE-2026-50525](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50525).
+
+#### CVE-2026-50527 – .NET Framework Denial of Service vulnerability
+
+This security update addresses a denial of service vulnerability detailed in [CVE-2026-50527](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50527).
+
+#### CVE-2026-50646 – .NET Framework Elevation of Privilege vulnerability
+
+This security update addresses an elevation of privilege vulnerability detailed in [CVE-2026-50646](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50646).
+
+#### CVE-2026-50647 – .NET Framework Denial of Service vulnerability
+
+This security update addresses a denial of service vulnerability detailed in [CVE-2026-50647](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50647).
+
+#### CVE-2026-50648 – .NET Framework Denial of Service vulnerability
+
+This security update addresses a denial of service vulnerability detailed in [CVE-2026-50648](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50648).
+
+#### CVE-2026-50649 – .NET Framework Remote Code Execution vulnerability
+
+This security update addresses a remote code execution vulnerability detailed in [CVE-2026-50649](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50649).
+
+#### CVE-2026-50650 – .NET Framework Elevation of Privilege vulnerability
+
+This security update addresses an elevation of privilege vulnerability detailed in [CVE-2026-50650](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50650).
+
+#### CVE-2026-50652 – .NET Framework Denial of Service vulnerability
+
+This security update addresses a denial of service vulnerability detailed in [CVE-2026-50652](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50652).
+
+#### CVE-2026-50653 – .NET Framework Denial of Service vulnerability
+
+This security update addresses a denial of service vulnerability detailed in [CVE-2026-50653](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50653).
+
+#### CVE-2026-50659 – .NET Framework Tampering vulnerability
+
+This security update addresses a tampering vulnerability detailed in [CVE-2026-50659](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-50659).
+
+#### CVE-2026-56158 – .NET Framework Remote Code Execution vulnerability
+
+This security update addresses a remote code execution vulnerability detailed in [CVE-2026-56158](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-56158).
+
+### Quality and reliability improvements
+
+**.NET Libraries**
+
+- Addresses an issue with synchronous `HttpWebRequest` connections where requests could hang in specific secure connection scenarios with certain server configurations.
+
+**.NET Runtime**
+
+- Addresses an issue in the Visual Studio x86 native debugger where certain floating-point values could be reported incorrectly during step operations in mixed-code applications.
+
+## Known issues in this release
+
+This release contains no known issues.
+
+## Summary tables
+
+The following table outlines the updates in this release.
+
+| Product version | Cumulative update |
+| --- | --- |
+| **Windows 11, version 26H1** | |
+| .NET Framework 4.8.1 | [5101002](https://support.microsoft.com/kb/5101002) |
+| **Windows 11, version 25H2** | |
+| .NET Framework 3.5, 4.8.1 | [5100998](https://support.microsoft.com/kb/5100998) |
+| **Windows 11, version 24H2** | |
+| .NET Framework 3.5, 4.8.1 | [5101001](https://support.microsoft.com/kb/5101001) |
+| **Microsoft server operating system, version 24H2** | |
+| .NET Framework 3.5, 4.8.1 | [5100998](https://support.microsoft.com/kb/5100998) |
+| **Microsoft server operating system, version 23H2** | |
+| .NET Framework 3.5, 4.8.1 | [5100999](https://support.microsoft.com/kb/5100999) |
+| **Windows 11, version 22H2 and Windows 11, version 23H2** | |
+| .NET Framework 3.5, 4.8.1 | [5101004](https://support.microsoft.com/kb/5101004) |
+| **Windows Server 2022** | **[5102206](https://support.microsoft.com/kb/5102206)** |
+| .NET Framework 3.5, 4.8 | [5101010](https://support.microsoft.com/kb/5101010) |
+| .NET Framework 3.5, 4.8.1 | [5101005](https://support.microsoft.com/kb/5101005) |
+| **Windows 10, version 22H2** | **[5102203](https://support.microsoft.com/kb/5102203)** |
+| .NET Framework 3.5, 4.8 | [5101006](https://support.microsoft.com/kb/5101006) |
+| .NET Framework 3.5, 4.8.1 | [5101000](https://support.microsoft.com/kb/5101000) |
+| **Windows 10, version 21H2** | **[5102202](https://support.microsoft.com/kb/5102202)** |
+| .NET Framework 3.5, 4.8 | [5101006](https://support.microsoft.com/kb/5101006) |
+| .NET Framework 3.5, 4.8.1 | [5101000](https://support.microsoft.com/kb/5101000) |
+| **Windows 10 1809 and Windows Server 2019** | **[5102201](https://support.microsoft.com/kb/5102201)** |
+| .NET Framework 3.5, 4.7.2 | [5100989](https://support.microsoft.com/kb/5100989) |
+| .NET Framework 3.5, 4.8 | [5101008](https://support.microsoft.com/kb/5101008) |
+| **Windows 10 1607 and Windows Server 2016** | |
+| .NET Framework 3.5, 4.6.2, 4.7, 4.7.1, 4.7.2 | [5099535](https://support.microsoft.com/kb/5099535) |
+| .NET Framework 4.8 | [5101007](https://support.microsoft.com/kb/5101007) |
+
+The following table is for earlier Windows and Windows Server versions for Security and Quality Rollup updates.
+
+| Product version | Security and quality rollup |
+| --- | --- |
+| **Windows Server 2012 R2** | **[5102205](https://support.microsoft.com/kb/5102205)** |
+| .NET Framework 3.5 | [5100985](https://support.microsoft.com/kb/5100985) |
+| .NET Framework 4.6.2, 4.7, 4.7.1, 4.7.2 | [5100991](https://support.microsoft.com/kb/5100991) |
+| .NET Framework 4.8 | [5101011](https://support.microsoft.com/kb/5101011) |
+| **Windows Server 2012** | **[5102204](https://support.microsoft.com/kb/5102204)** |
+| .NET Framework 3.5 | [5100986](https://support.microsoft.com/kb/5100986) |
+| .NET Framework 4.6.2, 4.7, 4.7.1, 4.7.2 | [5100990](https://support.microsoft.com/kb/5100990) |
+| .NET Framework 4.8 | [5101009](https://support.microsoft.com/kb/5101009) |
+
+The operating system rows list a KB that's used for update-offering purposes. When the operating system KB is offered, the applicability logic determines the specific .NET Framework updates that will be installed. Updates for individual .NET Framework versions are installed based on the version of .NET Framework that's already present on the device. Because of this, the operating system KB is not expected to be listed as an installed update on the device. The expected updates to be installed are the .NET Framework specific version updates listed in the preceding table.
+
+This update installs the complete .NET Framework 3.5 product for Windows 11, version 26H1 (build version 28000) and newer. Unlike traditional cumulative updates that patch individual components, this delivers the full .NET Framework 3.5 product as a standalone installer. It replaces any previously installed version.
+
+| Product version | .NET Framework 3.5 product update |
+| --- | --- |
+| **Windows 11, version 26H1** | [5101014](https://support.microsoft.com/kb/5101014) |
diff --git a/docs/framework/release-notes/release-notes.md b/docs/framework/release-notes/release-notes.md
index d5cb13b46f6b8..c12050ae5dfb4 100644
--- a/docs/framework/release-notes/release-notes.md
+++ b/docs/framework/release-notes/release-notes.md
@@ -11,7 +11,9 @@ The .NET Framework updates include cumulative security and reliability improveme
.NET Framework cumulative update releases are discussed in detail in the following individual release notes:
-* May 12, 2026 - [cumulative update](./2026/05-12-may-cumulative-update.md) **New Release**
+* July 14, 2026 - [cumulative update](./2026/07-14-july-cumulative-update.md) **New Release**
+* May 26, 2026 - [cumulative update preview](./2026/05-26-may-cumulative-update-preview.md)
+* May 12, 2026 - [cumulative update](./2026/05-12-may-cumulative-update.md)
* April 14, 2026 - [cumulative update](./2026/04-14-april-cumulative-update.md)
* February 10, 2026 - [cumulative update](./2026/02-10-february-cumulative-update.md)
* January 29, 2026 - [cumulative update preview](./2026/01-29-january-cumulative-update-preview.md)
diff --git a/docs/framework/toc.yml b/docs/framework/toc.yml
index 1c4f4090a7bbd..5646d103a40c8 100644
--- a/docs/framework/toc.yml
+++ b/docs/framework/toc.yml
@@ -679,6 +679,10 @@ items:
items:
- name: Overview and index
href: release-notes/release-notes.md
+ - name: July 2026 cumulative update
+ href: release-notes/2026/07-14-july-cumulative-update.md
+ - name: May 2026 cumulative update preview
+ href: release-notes/2026/05-26-may-cumulative-update-preview.md
- name: May 2026 cumulative update
href: release-notes/2026/05-12-may-cumulative-update.md
- name: April 2026 cumulative update
diff --git a/docs/navigate/devops-testing/toc.yml b/docs/navigate/devops-testing/toc.yml
index 310dd55593641..6da6c8c909e45 100644
--- a/docs/navigate/devops-testing/toc.yml
+++ b/docs/navigate/devops-testing/toc.yml
@@ -314,6 +314,15 @@ items:
- name: Crash and hang dumps
href: ../../core/testing/microsoft-testing-platform-crash-hang-dumps.md
displayName: MTP,crash dump,hang dump,diagnostics
+ - name: Diagnostics
+ href: ../../core/testing/microsoft-testing-platform-diagnostics.md
+ displayName: MTP,diagnostics,video recorder,screen recording,capture video
+ - name: Test host deployment
+ href: ../../core/testing/microsoft-testing-platform-test-host-deployment.md
+ displayName: MTP,test host,deployment,packaged app,UWP,WinUI,ITestHostLauncher
+ - name: Microsoft.Extensions integration
+ href: ../../core/testing/microsoft-testing-platform-extensions-integration.md
+ displayName: MTP,Microsoft.Extensions,logging bridge,ILogger,Microsoft.Extensions.Logging
- name: OpenTelemetry
href: ../../core/testing/microsoft-testing-platform-open-telemetry.md
displayName: MTP,OpenTelemetry,traces,metrics
diff --git a/docs/standard/serialization/system-text-json/customize-properties.md b/docs/standard/serialization/system-text-json/customize-properties.md
index 6b9931a77ef3d..86d53e9cf177e 100644
--- a/docs/standard/serialization/system-text-json/customize-properties.md
+++ b/docs/standard/serialization/system-text-json/customize-properties.md
@@ -12,7 +12,6 @@ helpviewer_keywords:
- "serialization"
- "objects, serializing"
ms.topic: how-to
-ms.custom: copilot-scenario-highlight
---
# How to customize property names and values with System.Text.Json
@@ -28,9 +27,6 @@ By default, property names and dictionary keys are unchanged in the JSON output,
> [!NOTE]
> The [web default](configure-options.md#web-defaults-for-jsonserializeroptions) naming policy is camel case.
-> [!TIP]
-> You can use AI assistance to [create an object with custom serialization properties](#use-ai-to-customize-how-property-names-are-serialized).
-
For other scenarios that require special handling of JSON property names and values, you can [implement custom converters](converters-how-to.md).
## Customize individual property names
@@ -243,43 +239,7 @@ By default, properties are serialized in the order in which they're defined in t
:::code language="csharp" source="snippets/how-to-6-0/csharp/PropertyOrder.cs":::
-## Use AI to customize how property names are serialized
-
-You can use AI tools, such as GitHub Copilot, to apply patterns of changes to how your code serializes.
-
-Suppose your class declaration has properties that follow `PascalCasing`, and the JSON standard for your project is `snake_casing`. You can use AI to add the necessary [[JsonPropertyName]](xref:System.Text.Json.Serialization.JsonPropertyNameAttribute) attributes to every property in your class. You can use Copilot to make these changes with a chat prompt like this:
-
-```copilot-prompt
-Update #ClassName:
-when the property name contains more than one word,
-change the serialized property name to use underscores between words.
-Use built-in serialization attributes.
-```
-
-Here's a more complete version of the example that includes a simple class.
-
-```copilot-prompt
-Take this C# class:
-public class WeatherForecast
-{
- public DateTime Date { get; set; }
- public int TemperatureC { get; set; }
- public int TemperatureF { get; set; }
- public string? Summary { get; set; }
- public int WindSpeed { get; set; }
-}
-When the property name contains more than one word,
-change the serialized property name to use underscores between words.
-Use built-in serialization attributes.
-```
-
-Review Copilot's suggestions before applying them.
-
-For more information about GitHub Copilot, see GitHub's [FAQs](https://github.com/features/copilot#faq).
-
## See also
- [System.Text.Json overview](overview.md)
- [How to serialize and deserialize JSON](how-to.md)
-- [GitHub Copilot in Visual Studio](/visualstudio/ide/visual-studio-github-copilot-install-and-states)
-- [GitHub Copilot in VS Code](https://code.visualstudio.com/docs/copilot/overview)