Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
308af64
Document DOTNET_CLI_ENABLEAOT environment variable (#54649)
baronfel Jul 7, 2026
db6a7bc
Document MSTest and MTP feature versions (#54408)
Evangelink Jul 7, 2026
1247695
Add exploration tutorial for unions and closed hierarchies (#54627)
BillWagner Jul 7, 2026
8acdb82
sort the C# redirection file (#54666)
BillWagner Jul 7, 2026
3cfca6f
Delete .github/workflows/profanity-filter.yml (#54667)
gewarren Jul 7, 2026
fd1fbf2
Document InlineArrayAttribute is the correct approach for fixed-size …
Copilot Jul 7, 2026
34593dd
Reword some regex safety warnings (#54621)
GrabYourPitchforks Jul 7, 2026
6852605
Breaking change: Document dnx scripts bypassing global.json SDK selec…
Copilot Jul 7, 2026
927385c
Refactor buffer examples to improve safety (#54669)
AaronRobinsonMSFT Jul 8, 2026
64695fa
Bump the dotnet group with 1 update (#54680)
dependabot[bot] Jul 8, 2026
e9750f3
Bump the dotnet group with 2 updates (#54687)
dependabot[bot] Jul 8, 2026
3cd139f
Fix typo in README (#54673)
pshrote-afk Jul 8, 2026
ed28628
Bump the dotnet group with 1 update (#54689)
dependabot[bot] Jul 8, 2026
f84029d
Bump the dotnet group with 2 updates (#54692)
dependabot[bot] Jul 8, 2026
b48b07f
Bump the dotnet group with 1 update (#54693)
dependabot[bot] Jul 8, 2026
62dc042
Bump the dotnet group with 1 update (#54702)
dependabot[bot] Jul 8, 2026
255acce
Bump the dotnet group with 3 updates (#54704)
dependabot[bot] Jul 8, 2026
494a9c6
Bump the dotnet group with 1 update (#54705)
dependabot[bot] Jul 8, 2026
bb1444f
Bump the dotnet group with 2 updates (#54707)
dependabot[bot] Jul 8, 2026
51fa365
Bump actions/setup-dotnet from 5.3.0 to 5.4.0 (#54674)
dependabot[bot] Jul 8, 2026
b93a293
Update GHCP AppMod docs: scenarios, platforms, and titles (#54664)
adegeo Jul 8, 2026
78826cc
Document missing IDE style rules: IDE0043, IDE0390, IDE0391, IDE1007 …
Copilot Jul 8, 2026
2b9739d
Document MSTest 4.3 random test order and parallelization MSBuild pro…
Evangelink Jul 8, 2026
cbf745f
Document MSTEST0047 and the MSTest 4.3 analyzers (MSTEST0064-0068) (#…
Evangelink Jul 8, 2026
26ea5ca
Reorganize MTP features by functionality and document GitHub Actions …
Evangelink Jul 8, 2026
9a4c07d
Adjust the instructions for the GHCP (#54715)
adegeo Jul 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 0 additions & 32 deletions .github/workflows/profanity-filter.yml

This file was deleted.

2 changes: 1 addition & 1 deletion .github/workflows/snippets5000.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
# Get the latest preview SDK (or sdk not installed by the runner)
- name: Setup .NET
if: ${{ env.DOTNET_DO_INSTALL == 'true' }}
uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 #@5.3.0
uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 #@5.4.0
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
dotnet-quality: ${{ env.DOTNET_QUALITY }}
Expand Down
1,210 changes: 605 additions & 605 deletions .openpublishing.redirection.csharp.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.7.0" />
<PackageReference Include="microsoft.extensions.configuration" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.9" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.6.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.7.0" />
<PackageReference Include="MSTest" Version="4.2.3" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
<ItemGroup>
<PackageReference Include="Azure.AI.OpenAI" Version="2.1.0" />
<PackageReference Include="Azure.Identity" Version="1.21.0" />
<PackageReference Include="Microsoft.Extensions.AI" Version="10.6.0" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.6.0" />
<PackageReference Include="Microsoft.Extensions.AI" Version="10.7.0" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.7.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
<ItemGroup>
<PackageReference Include="Azure.Identity" Version="1.21.0" />
<PackageReference Include="Azure.AI.OpenAI" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.6.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.8" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.8" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.7.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.9" />

</ItemGroup>

Expand Down
2 changes: 1 addition & 1 deletion docs/ai/snippets/prompt-engineering/multi-turn-chat.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

<ItemGroup>
<PackageReference Include="Azure.AI.OpenAI" Version="2.8.0-beta.1" />
<PackageReference Include="Microsoft.Agents.AI.OpenAI" Version="1.11.0" />
<PackageReference Include="Microsoft.Agents.AI.OpenAI" Version="1.12.0" />
<!--
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.2" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ Although this application uses several projects for organizational purposes, it'

**Figure 5-4.** Simple deployment of Azure Web App

As application needs grow, more complex and robust deployment solutions may be required. Figure 5-5 shows an example of a more complex deployment plan that supports additional capabilities.
As the application grows, more complex and robust deployment solutions may be required. Figure 5-5 shows an example of a more complex deployment plan that supports additional capabilities.

![Deploying a web app to an Azure App Service](./media/image5-5.png)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.9" />
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.20.1" />
<PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.11.0" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.29.0" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.29.1" />
<PackageReference Include="Microsoft.Extensions.Azure" Version="1.14.0" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Azure.Core" Version="1.59.0" />
<PackageReference Include="Azure.Core" Version="1.60.0" />
<PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.11.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.6.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.7.0" />
<PackageReference Include="Moq" Version="[4.20.72]" /> <!-- Context: https://github.com/Azure/azure-sdk-for-net/issues/38111 -->
<PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="xunit" Version="2.9.3" />
Expand Down
1 change: 1 addition & 0 deletions docs/core/compatibility/10.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ See [Breaking changes in EF Core 10](/ef/core/what-is-new/ef-core-10.0/breaking-
| [Default workload configuration from 'loose manifests' to 'workload sets' mode](sdk/10.0/default-workload-config.md) | Behavioral change |
| [`DefineConstants` for target frameworks not available at evaluation time](sdk/10.0/defineconstants-not-available-at-evaluation.md) | Behavioral change |
| [Code coverage EnableDynamicNativeInstrumentation defaults to false](sdk/10.0/code-coverage-dynamic-native-instrumentation.md) | Behavioral change |
| [dnx scripts bypass global.json SDK selection](sdk/11/dnx-scripts-bypass-global-json.md) | Behavioral change |
| [dnx.ps1 file is no longer included in .NET SDK](sdk/10.0/dnx-ps1-removed.md) | Source incompatible |
| [Double quotes in file-level directives are disallowed](sdk/10.0/file-level-directive-double-quotes.md) | Source incompatible |
| [`dotnet new sln` defaults to SLNX file format](sdk/10.0/dotnet-new-sln-slnx-default.md) | Behavioral change |
Expand Down
1 change: 1 addition & 0 deletions docs/core/compatibility/11.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ See [Breaking changes in EF Core 11](/ef/core/what-is-new/ef-core-11.0/breaking-

| Title | Type of change |
|-------------------------------------------------------------------|-------------------|
| [dnx scripts bypass global.json SDK selection](sdk/11/dnx-scripts-bypass-global-json.md) | Behavioral change |
| [mono launch target not set for .NET Framework apps](sdk/11/mono-launch-target-removed.md) | Behavioral change |
| [NU1703 warns for packages that use deprecated MonoAndroid framework assets](sdk/11/nu1703-deprecated-monoandroid-framework.md) | Source incompatible |
| [Template engine packages no longer support netstandard2.0](sdk/11/template-engine-netstandard.md) | Binary/source incompatible |
Expand Down
40 changes: 40 additions & 0 deletions docs/core/compatibility/sdk/11/dnx-scripts-bypass-global-json.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
title: "Breaking change: dnx scripts bypass global.json SDK selection"
description: "Learn about the breaking change in .NET 11 where the dnx and dnx.cmd scripts no longer respect global.json for SDK selection."
ms.date: 07/05/2026
ai-usage: ai-assisted
---

# dnx scripts bypass global.json SDK selection

The `dnx` and `dnx.cmd` scripts no longer use the .NET muxer to select the SDK version. Instead, they find the newest installed SDK and invoke it directly, which bypasses any `global.json` file in the working directory.

## Version introduced

.NET 10 SDK 10.0.302, 10.0.400, and .NET 11 Preview 6

## Previous behavior

Previously, the `dnx` scripts invoked `dotnet dnx`, which relied on the .NET muxer to select the SDK version based on any `global.json` file in the working directory. If `global.json` pinned an SDK version that predated .NET 10, the scripts failed with the following error:

```output
Unrecognized command or argument 'execute'
```

Starting with .NET 10 SDK 10.0.302 (and later) and .NET 11 Preview 6, the `dnx` and `dnx.cmd` scripts use `dotnet --list-sdks` to identify the newest installed SDK. They then invoke `dotnet exec <sdk-path>/dotnet.dll dnx` directly, bypassing the .NET muxer and any `global.json` SDK pinning.

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

Some .NET CLI commands, including `dnx`, are considered version-independent features that should always run with the newest installed SDK. Relying on `global.json` meant that users who pinned an older SDK version to reduce risk from build-impacting changes also inadvertently broke `dnx`. In folders where a pre-.NET 10 SDK was pinned, the `dnx` command was unavailable, which caused confusing errors and, in some cases, timeouts in tools like Copilot CLI.

## Recommended action

To restore the previous behavior where the .NET muxer and `global.json` control SDK selection, run `dotnet dnx` explicitly instead of the `dnx` script.

## Affected APIs

None.
2 changes: 2 additions & 0 deletions docs/core/compatibility/toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ items:
href: maui/11/android-minimum-api-level.md
- name: SDK and MSBuild
items:
- name: dnx scripts bypass global.json SDK selection
href: sdk/11/dnx-scripts-bypass-global-json.md
- name: mono launch target not set for .NET Framework apps
href: sdk/11/mono-launch-target-removed.md
- name: NU1703 warns for packages that use deprecated MonoAndroid framework assets
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.ResourceMonitoring" Version="10.7.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.9" />
<PackageReference Include="Spectre.Console" Version="0.57.0" />
<PackageReference Include="Spectre.Console" Version="0.57.1" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.8" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.8" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.9" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.9" />
<PackageReference Include="Refit.HttpClientFactory" Version="12.0.0" />
<PackageReference Include="Refit.HttpClientFactory" Version="13.0.0" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: Best practices for GitHub Copilot modernization
description: "Learn best practices for using GitHub Copilot modernization to upgrade .NET projects, including preparation, collaboration tips, common pitfalls, and recovery strategies."
ms.topic: best-practice
ms.date: 04/06/2026
ms.date: 07/07/2026
ai-usage: ai-assisted

#customer intent: As a developer, I want to follow best practices when using GitHub Copilot modernization so that I can get the best results from my .NET upgrades and avoid common problems.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: GitHub Copilot modernization core concepts
description: "Learn the key concepts behind GitHub Copilot modernization, including scenarios, skills, tasks, the three-stage workflow, state management, and flow modes."
ms.topic: concept-article
ms.date: 04/06/2026
ms.date: 07/07/2026
ai-usage: ai-assisted

#customer intent: As a developer, I want to understand the core concepts of GitHub Copilot modernization so that I can use the agent effectively and get the best results from my upgrades.
Expand Down Expand Up @@ -158,7 +158,6 @@ The agent maintains persistent state so you can stop and resume at any time. Eve
| `upgrade-options.md` | Confirmed upgrade decisions |
| `plan.md` | The upgrade plan with strategy and task descriptions |
| `tasks.md` | Visual progress dashboard showing task status |
| `execution-log.md` | Detailed log of all changes and decisions |
| `tasks/{taskId}/task.md` | Per-task scope and context |
| `tasks/{taskId}/progress-details.md` | Per-task execution notes and results |

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: Customize GitHub Copilot modernization
description: "Learn how to customize GitHub Copilot modernization with custom skills, custom scenarios, scenario artifact edits, and chat instructions to encode your team's upgrade patterns."
ms.topic: concept-article
ms.date: 04/06/2026
ms.date: 07/07/2026
ai-usage: ai-assisted

#customer intent: As a developer, I want to customize GitHub Copilot modernization so that I can encode my team's upgrade patterns, enforce coding standards during upgrades, and define custom upgrade workflows.
Expand Down
8 changes: 2 additions & 6 deletions docs/core/porting/github-copilot-app-modernization/faq.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ metadata:
description: "This article answers frequently asked questions about GitHub Copilot modernization for .NET."
titleSuffix: ""
ms.topic: faq
ms.date: 04/06/2026
ms.date: 07/07/2026

title: GitHub Copilot modernization FAQ
summary: |
Expand Down Expand Up @@ -102,11 +102,7 @@ sections:
answer: |
The agent supports the following upgrade paths:

| Source | Target |
|------------------------------|-----------------|
| .NET Framework (any version) | .NET 8 or later |
| .NET Core 1.x–3.x | .NET 8 or later |
| .NET 5 or later | .NET 8 or later |
[!INCLUDE[supported-upgrade-paths](./includes/supported-upgrade-paths.md)]

- question: Can I use the agent offline?
answer: |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,13 @@ Beyond custom upgrade instructions, you can extend GitHub Copilot modernization

Follow these steps to generate and refine a new instruction file. These sections focus on replacing `Newtonsoft.Json` with `System.Text.Json` as an example.

1. In the **Solution Explorer** window, right-click the **solution** > **Modernize**.
### Initiate the upgrade

\-or-
Use the following steps to start an upgrade:

Open the Copilot chat panel and type `@Modernize` to start a conversation with the agent.
[!INCLUDE[github-copilot-how-to-initiate](./includes/how-to-initiate.md)]

> [!NOTE]
> These steps apply to Visual Studio. In Visual Studio Code and other environments, invoke the `modernize-dotnet` agent directly from the Copilot chat panel. In Visual Studio, the agent is named `Modernize`.
### Create the instruction file

1. In the chat, type: `I want to generate a custom upgrade instruction`.
1. When asked, provide a scenario like `I want to replace Newtonsoft with System.Text.Json` to have Copilot create the file.
Expand Down Expand Up @@ -76,10 +75,13 @@ Follow these guidelines to write clear, effective custom upgrade instructions th

Before running the instruction during an upgrade, validate it in isolation. Isolated testing helps you refine detection and verify code changes.

1. In the **Solution Explorer** window, right-click the **solution** > **Modernize**.
### Initiate the upgrade

> [!NOTE]
> These steps apply to Visual Studio. In Visual Studio Code and other environments, invoke the `modernize-dotnet` agent directly from the Copilot chat panel.
Use the following steps to start an upgrade:

[!INCLUDE[github-copilot-how-to-initiate](./includes/how-to-initiate.md)]

### Test the upgrade instruction

1. In chat, invoke the instruction with wording similar to the file name. For example, `replace Newtonsoft with System.Text.Json`.
1. Confirm in the chat window that Copilot retrieved the instruction file:
Expand All @@ -106,12 +108,16 @@ If the test run doesn't produce the expected results, use these troubleshooting

Use these steps to incorporate an existing custom upgrade instruction into the assessment stage of an upgrade.

1. In the **Solution Explorer** window, right-click the **solution** > **Modernize**.
### Initiate the upgrade

To start the upgrade, follow these steps:

[!INCLUDE[github-copilot-how-to-initiate](./includes/how-to-initiate.md)]

### Customize the upgrade

> [!NOTE]
> These steps apply to Visual Studio. In Visual Studio Code and other environments, invoke the `modernize-dotnet` agent directly from the Copilot chat panel.
Follow these steps during the assessment stage:

1. In the chat, choose `Upgrade to a newer version of .NET`. Answer Copilot's questions until it begins the assessment.
1. Monitor the chat to see if Copilot automatically retrieves your custom instruction file during the assessment. Look for a message indicating it opened the Markdown instruction file.

If Copilot doesn't automatically apply the custom instructions, explicitly request them. Use wording similar to the file name. For example, `use the custom instructions to replace Newtonsoft with System.Text.Json during the assessment`.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: How to upgrade a .NET app with GitHub Copilot modernization
description: "Learn how to upgrade your .NET applications to newer versions using GitHub Copilot modernization. This step-by-step guide covers assessment and the three-stage workflow: assessment, planning, and execution."
ms.topic: how-to
ms.date: 04/06/2026
ms.date: 07/07/2026
ai-usage: ai-assisted

#customer intent: As a developer, I want to upgrade my .NET app using GitHub Copilot modernization so that I can modernize my codebase efficiently with AI assistance through a structured three-stage process.
Expand All @@ -21,7 +21,7 @@ Set up GitHub Copilot modernization in your development environment before start

## Initiate the upgrade

To start an upgrade, use the `modernize-dotnet` agent in Copilot:
To start the upgrade, follow these steps:

[!INCLUDE[github-copilot-how-to-initiate](./includes/how-to-initiate.md)]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
---
author: adegeo
ms.author: adegeo
ms.date: 03/04/2026
ms.date: 07/08/2026
ms.topic: include
---

1. Open your .NET project or solution in your development environment.
1. Start the agent by using one of these methods:

- **Visual Studio**: Right-click the solution or project in **Solution Explorer** and select **Modernize**. Or, open the **GitHub Copilot Chat** window and type `@Modernize`.
- **Visual Studio**: Right-click the solution or project in **Solution Explorer** and select **Modernize**. Alternatively, open the **GitHub Copilot Chat** window and type `@Modernize`.
- **Visual Studio Code**: Open the **GitHub Copilot Chat** panel and type `@modernize-dotnet`.
- **GitHub Copilot CLI**: Type `@modernize-dotnet` followed by your upgrade or migration request.
- **GitHub.com**: Use the `modernize-dotnet` coding agent in your repository.
- **GitHub Copilot CLI**: Type `@upgrade` followed by your upgrade or migration request.
- **GitHub Copilot app**: In the **Agent** picker, select `Upgrade`.

1. Tell the agent what to upgrade or migrate.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
author: adegeo
ms.author: adegeo
ms.date: 07/07/2026
ms.topic: include
---

| Source | Target |
|------------------------------|---------------------------|
| .NET Framework (any version) | .NET 8 or later |
| .NET Framework (any version) | .NET Framework 4.8.1 |
| .NET Core 1.x–3.x | .NET 8 or later |
| .NET 5 or later | .NET 8 or later |
Loading
Loading