Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
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
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ ms.topic: get-started

## Prerequisites

* Azure subscription. [Create one for free](https://azure.microsoft.com/free/ai-services?azure-portal=true).
* Azure subscription. [Create one for free](https://azure.microsoft.com/pricing/purchase-options/azure-account?cid=msft_learn).

[Dev containers](https://containers.dev/) are available for both samples, with all dependencies required to complete this article. You can run the dev containers in GitHub Codespaces (in a browser) or locally using Visual Studio Code.

Expand Down
4 changes: 2 additions & 2 deletions docs/ai/get-started-app-chat-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,13 @@ To follow along with this article, you need the following prerequisites:

#### [Codespaces (recommended)](#tab/github-codespaces)

* An Azure subscription - [Create one for free](https://azure.microsoft.com/free/ai-services?azure-portal=true)
* An Azure subscription - [Create one for free](https://azure.microsoft.com/pricing/purchase-options/azure-account?cid=msft_learn)
* Azure account permissions - Your Azure account must have Microsoft.Authorization/roleAssignments/write permissions, such as [User Access Administrator](/azure/role-based-access-control/built-in-roles#user-access-administrator) or [Owner](/azure/role-based-access-control/built-in-roles#owner).
* GitHub account

#### [Visual Studio Code](#tab/visual-studio-code)

* An Azure subscription - [Create one for free](https://azure.microsoft.com/free/ai-services?azure-portal=true)
* An Azure subscription - [Create one for free](https://azure.microsoft.com/pricing/purchase-options/azure-account?cid=msft_learn)
* Azure account permissions - Your Azure account must have Microsoft.Authorization/roleAssignments/write permissions, such as [User Access Administrator](/azure/role-based-access-control/built-in-roles#user-access-administrator) or [Owner](/azure/role-based-access-control/built-in-roles#owner).
* [Azure Developer CLI](/azure/developer/azure-developer-cli)
* [Docker Desktop](https://www.docker.com/products/docker-desktop/) - Start Docker Desktop if it's not already running
Expand Down
2 changes: 1 addition & 1 deletion docs/ai/how-to/app-service-aoai-auth.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ A managed identity from Microsoft Entra ID allows your app to easily access othe

## Prerequisites

* An Azure account that has an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
* An Azure account that has an active subscription. [Create an account for free](https://azure.microsoft.com/pricing/purchase-options/azure-account?cid=msft_learn).
* [.NET SDK](https://dotnet.microsoft.com/download/visual-studio-sdks)
* [Create and deploy an Azure OpenAI Service resource](/azure/ai-services/openai/how-to/create-resource)
* [Create and deploy a .NET application to App Service](/azure/app-service/quickstart-dotnetcore)
Expand Down
2 changes: 1 addition & 1 deletion docs/ai/how-to/content-filtering.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ The [Content Filtering](/azure/ai-services/openai/concepts/content-filter) docum

## Prerequisites

* An Azure account that has an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
* An Azure account that has an active subscription. [Create an account for free](https://azure.microsoft.com/pricing/purchase-options/azure-account?cid=msft_learn).
* [.NET SDK](https://dotnet.microsoft.com/download/visual-studio-sdks)
* [Create and deploy an Azure OpenAI Service resource](/azure/ai-services/openai/how-to/create-resource)

Expand Down
7 changes: 5 additions & 2 deletions docs/ai/quickstarts/build-mcp-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,20 +66,23 @@ Configure GitHub Copilot for Visual Studio Code to use your custom MCP server:
"args": [
"run",
"--project",
"<RELATIVE PATH TO PROJECT DIRECTORY>"
"<relative-path-to-project-file>"
]
}
}
}
```

> [!NOTE]
> VS Code executes MCP servers from the workspace root. The `<relative-path-to-project-file>` placeholder should point to your .NET project file. For example, the value for this **SampleMcpServer** app would be `SampleMcpServer.csproj`.

1. Save the file.

## Test the MCP server

The MCP server template includes a tool called `get_random_number` you can use for testing and as a starting point for development.

1. Open GitHub Copilot in Visual Studio Code and switch to chat mode.
1. Open GitHub Copilot in Visual Studio Code and switch to agent mode.

1. Select the **Select tools** icon to verify your **SampleMcpServer** is available with the sample tool listed.

Expand Down
2 changes: 1 addition & 1 deletion docs/azure/create-azure-account.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ If you have a Visual Studio subscription, your subscription includes credits for

## Option 2: Sign up for a free Azure account

You can create an [Azure account for free](https://azure.microsoft.com/free/dotnet/) and receive 12 months of popular services for free and a $200 credit to explore Azure for 30 days.
You can create an [Azure account for free](https://azure.microsoft.com/pricing/purchase-options/azure-account?cid=msft_learn) and receive 12 months of popular services for free and a $200 credit to explore Azure for 30 days.

## Option 3: Sign up for a pay-as-you-go account

Expand Down
2 changes: 1 addition & 1 deletion docs/azure/dotnet-dev-env-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ This checklist is provided to help you make sure you have your development envir
To access Azure services or run applications in Azure, you need an Azure account.

* If you are a Visual Studio subscriber, you have monthly [free Azure credits](https://azure.microsoft.com/pricing/member-offers/credit-for-visual-studio-subscribers/) available to you every month
* [Create a free Azure account](https://azure.microsoft.com/free/dotnet/) and receive $200 in credits and select services free for 12 months
* [Create a free Azure account](https://azure.microsoft.com/pricing/purchase-options/azure-account?cid=msft_learn) and receive $200 in credits and select services free for 12 months
* Use an account assigned to you by your company's Azure administrator

## Configure your IDE
Expand Down
8 changes: 4 additions & 4 deletions docs/azure/migration/appmod/predefined-tasks.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: Predefined tasks for GitHub Copilot app modernization for .NET (Preview)
title: Predefined tasks for GitHub Copilot app modernization for .NET
description: Learn about the predefined tasks that are available for GitHub Copilot app modernization for .NET
ms.topic: concept-article
ms.custom: devx-track-dotnet
Expand All @@ -8,11 +8,11 @@ author: alexwolfmsft
ms.author: alexwolf
---

# Predefined tasks for GitHub Copilot app modernization for .NET (Preview)
# Predefined tasks for GitHub Copilot app modernization for .NET

This article describes the predefined tasks available for GitHub Copilot app modernization for .NET (Preview).
This article describes the predefined tasks available for GitHub Copilot app modernization for .NET.

Predefined tasks capture industry best practices for using Azure services. Currently, App Modernization for .NET (Preview) offers predefined tasks that cover common migration scenarios. These tasks address the following subjects, and more:
Predefined tasks capture industry best practices for using Azure services. Currently, App Modernization for .NET offers predefined tasks that cover common migration scenarios. These tasks address the following subjects, and more:

- Database migration
- Storage migration
Expand Down
2 changes: 1 addition & 1 deletion docs/azure/sdk/resource-management.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Those packages follow the [new Azure SDK guidelines](https://azure.github.io/azu

### Prerequisites

- An [Azure subscription](https://azure.microsoft.com/free/dotnet/).
- An [Azure subscription](https://azure.microsoft.com/pricing/purchase-options/azure-account?cid=msft_learn).
- A [TokenCredential](/dotnet/api/azure.core.tokencredential?view=azure-dotnet&preserve-view=false) implementation, such as an [Azure Identity library credential type](/dotnet/api/overview/azure/Identity-readme#credential-classes).

### Install the package
Expand Down
3 changes: 3 additions & 0 deletions docs/core/compatibility/10.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ If you're migrating an app to .NET 10, the breaking changes listed here might af
| [MacCatalyst version normalization](core-libraries/10.0/maccatalyst-version-normalization.md) | Behavioral change | Preview 1 |
| [.NET runtime no longer provides default termination signal handlers](core-libraries/10.0/sigterm-signal-handler.md) | Behavioral change | Preview 5 |
| [System.Linq.AsyncEnumerable included in core libraries](core-libraries/10.0/asyncenumerable.md) | Source incompatible | Preview 1 |
| [Type.MakeGenericSignatureType argument validation](reflection/10/makegeneric-signaturetype-validation.md) | Behavioral change | Preview 3 |
| [YMM embedded rounding removed from AVX10.2](core-libraries/10.0/ymm-embedded-rounding.md) | Behavioral change | Preview 5 |

## Cryptography
Expand Down Expand Up @@ -105,12 +106,14 @@ If you're migrating an app to .NET 10, the breaking changes listed here might af
| Title | Type of change | Introduced version |
|-------|-------------------|--------------------|
| [.NET CLI `--interactive` defaults to `true` in user scenarios](sdk/10.0/dotnet-cli-interactive.md) | Behavioral change | Preview 3 |
| [`dotnet` CLI commands log non-command-relevant data to stderr](sdk/10.0/dotnet-cli-stderr-output.md) | Behavioral change | RC 2 |
| [.NET tool packaging creates RuntimeIdentifier-specific tool packages](sdk/10.0/dotnet-tool-pack-publish.md) | Behavioral change | Preview 6 |
| [Default workload configuration from 'loose manifests' to 'workload sets' mode](sdk/10.0/default-workload-config.md) | Behavioral change | Preview 2 |
| [`dotnet new sln` defaults to SLNX file format](sdk/10.0/dotnet-new-sln-slnx-default.md) | Behavioral change | RC 1 |
| [`dotnet package list` performs restore](sdk/10.0/dotnet-package-list-restore.md) | Behavioral change | Preview 4 |
| [`dotnet restore` audits transitive packages](sdk/10.0/nugetaudit-transitive-packages.md) | Behavioral change | Preview 3 |
| [`dotnet tool install --local` creates manifest by default](sdk/10.0/dotnet-tool-install-local-manifest.md) | Behavioral change | Preview 7 |
| [`dotnet watch` logs to stderr instead of stdout](sdk/10.0/dotnet-watch-stderr.md) | Behavioral change | RC 2 |
| [project.json not supported in `dotnet restore`](sdk/10.0/dotnet-restore-project-json-unsupported.md) | Source incompatible | Preview 7 |
| [SHA-1 fingerprint support deprecated in `dotnet nuget sign`](sdk/10.0/dotnet-nuget-sign-sha1-deprecated.md) | Behavioral change | Preview 1 |
| [MSBUILDCUSTOMBUILDEVENTWARNING escape hatch removed](sdk/10.0/custom-build-event-warning.md) | Behavioral change | Preview 1 |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
title: "Breaking change: Type.MakeGenericSignatureType argument validation"
description: Learn about the .NET 10 breaking change in core .NET libraries where Type.MakeGenericSignatureType validates that the genericTypeDefinition argument is a generic type definition.
ms.date: 10/13/2025
ai-usage: ai-assisted
ms.custom: https://github.com/dotnet/docs/issues/48902
---
# Type.MakeGenericSignatureType argument validation

Starting in .NET 10, the <xref:System.Type.MakeGenericSignatureType(System.Type,System.Type[])?displayProperty=nameWithType> API validates that the `genericTypeDefinition` argument is a generic type definition.

## Version introduced

.NET 10 Preview 3

## Previous behavior

Previously, <xref:System.Type.MakeGenericSignatureType(System.Type,System.Type[])?displayProperty=nameWithType> accepted any type for the `genericTypeDefinition` argument, including non-generic types.

## New behavior

Starting in .NET 10, <xref:System.Type.MakeGenericSignatureType(System.Type,System.Type[])?displayProperty=nameWithType> requires the `genericTypeDefinition` argument to be a generic type definition. If the argument is not a generic type definition, the method throws an <xref:System.ArgumentException>.

## Type of breaking change

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

## Reason for change

The type created by <xref:System.Type.MakeGenericSignatureType(System.Type,System.Type[])?displayProperty=nameWithType> had non-sensical behavior when the `genericTypeDefinition` argument was not a generic type definition.

## Recommended action

Avoid calling <xref:System.Type.MakeGenericSignatureType(System.Type,System.Type[])?displayProperty=nameWithType> for types that are not generic type definitions. For example:

```csharp
// Before
Type instantiatedType = Type.MakeGenericSignatureType(originalType, instantiation);

// After
Type instantiatedType = originalType.IsGenericTypeDefinition ? Type.MakeGenericSignatureType(originalType, instantiation) : originalType;
```

## Affected APIs

- <xref:System.Type.MakeGenericSignatureType(System.Type,System.Type[])?displayProperty=fullName>
41 changes: 41 additions & 0 deletions docs/core/compatibility/sdk/10.0/dotnet-cli-stderr-output.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
title: "Breaking change - dotnet CLI commands log non-command-relevant data to stderr"
description: "Learn about the breaking change in .NET 10 where some dotnet CLI commands log verbose and non-command-relevant data to stderr instead of stdout."
ms.date: 10/08/2025
ai-usage: ai-generated
ms.custom: https://dev.azure.com/msft-skilling/Content/_workitems/edit/494515
---

# dotnet CLI commands log non-command-relevant data to stderr

Starting in .NET 10, some `dotnet` CLI command output that isn't core to the command being invoked emits to `stderr` instead of `stdout`.

## Version introduced

.NET 10 RC 2

## Previous behavior

Previously, first-run messages for the `dotnet` CLI emitted to `stdout`.

## New behavior

Starting in .NET 10, first-run messages for the `dotnet` CLI emit to `stderr`. (In the future, more messages will undergo a similar change.)

## Type of breaking change

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

## Reason for change

Information that's written to `stdout` that isn't directly related to the command being invoked inhibits the use of commands in scripting or noninteractive circumstances. When non-primary outputs like diagnostics, verbose messages, and incidental notifications are moved to `stderr`, `stdout` remains clean for parsing or other interpretation.

## Recommended action

For most non-PowerShell users, this change shouldn't require any action.

For PowerShell users, we recommend using at least PowerShell version 7.2, where redirecting to `stderr` doesn't set PowerShell's `$Error` variable and cause PowerShell to think the previous command failed execution.

## Affected APIs

None.
38 changes: 38 additions & 0 deletions docs/core/compatibility/sdk/10.0/dotnet-watch-stderr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
title: "Breaking change: 'dotnet watch' logs to stderr instead of stdout"
description: "Learn about the breaking change in .NET 10 where 'dotnet watch' emits its internal-facing log messages to stderr instead of stdout."
ms.date: 10/08/2025
ai-usage: ai-generated
ms.custom: https://github.com/dotnet/docs/issues/45871
---
# 'dotnet watch' logs to stderr instead of stdout

Starting in .NET 10, [`dotnet watch`](../../../tools/dotnet-watch.md) emits its internal-facing log messages to the `stderr` channel instead of `stdout`. This change is part of a general trend towards `dotnet` CLI commands not obscuring the `stdout` channel. That channel is often reserved for special semantics when running certain kinds of applications, like LSP or MCP servers.

## Version introduced

.NET 10 RC 2

## Previous behavior

Previously, [`dotnet watch`](../../../tools/dotnet-watch.md) emitted log messages to `stdout`.

## New behavior

Starting in .NET 10, [`dotnet watch`](../../../tools/dotnet-watch.md) emits log messages to `stderr`.

## Type of breaking change

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

## Reason for change

This change is part of a general trend towards `dotnet` CLI commands not obscuring the `stdout` channel, which is often reserved or assumed to have special semantics when running certain kinds of applications, like LSP or MCP servers. In general, the .NET CLI should get out of the way of your applications.

## Recommended action

Most users shouldn't need to take any action. If you need the `dotnet watch` messages on `stdout`, you can redirect the `stderr` stream to `stdout`. For example, use `2>&1` to redirect the `2` file descriptor for `stderr` to the `1` file descriptor for `stdout`.

## Affected APIs

None.
20 changes: 14 additions & 6 deletions docs/core/compatibility/toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,16 @@ items:
href: networking/10.0/default-http-streaming.md
- name: "'Uri' length limits removed"
href: networking/10.0/uri-length-limits-removed.md
- name: Reflection
items:
- name: Type.MakeGenericSignatureType argument validation
href: reflection/10/makegeneric-signaturetype-validation.md
- name: SDK and MSBuild
items:
- name: .NET CLI `--interactive` defaults to `true` in user scenarios
href: sdk/10.0/dotnet-cli-interactive.md
- name: "`dotnet` CLI commands log non-command-relevant data to stderr"
href: sdk/10.0/dotnet-cli-stderr-output.md
- name: .NET tool packaging creates RuntimeIdentifier-specific tool packages
href: sdk/10.0/dotnet-tool-pack-publish.md
- name: "`dotnet restore` audits transitive packages"
Expand All @@ -128,6 +134,10 @@ items:
href: sdk/10.0/dotnet-package-list-restore.md
- name: "`dotnet tool install --local` creates manifest by default"
href: sdk/10.0/dotnet-tool-install-local-manifest.md
- name: "`dotnet watch` logs to stderr instead of stdout"
href: sdk/10.0/dotnet-watch-stderr.md
- name: HTTP warnings promoted to errors in package list and search
href: sdk/10.0/http-warnings-to-errors.md
- name: MSBUILDCUSTOMBUILDEVENTWARNING escape hatch removed
href: sdk/10.0/custom-build-event-warning.md
- name: MSBuild custom culture resource handling
Expand All @@ -136,16 +146,14 @@ items:
href: sdk/10.0/nu1510-pruned-references.md
- name: NuGet packages with no runtime assets aren't included in deps.json
href: sdk/10.0/deps-json-trimmed-packages.md
- name: PackageReference without a version raises error
href: sdk/10.0/nu1015-packagereference-version.md
- name: PrunePackageReference privatizes direct prunable references
href: sdk/10.0/prune-packagereference-privateassets.md
- name: HTTP warnings promoted to errors in package list and search
href: sdk/10.0/http-warnings-to-errors.md
- name: NUGET_ENABLE_ENHANCED_HTTP_RETRY environment variable removed
href: sdk/10.0/nuget-enhanced-http-retry-removed.md
- name: NuGet logs an error for invalid package IDs
href: sdk/10.0/nuget-packageid-validation.md
- name: PackageReference without a version raises error
href: sdk/10.0/nu1015-packagereference-version.md
- name: PrunePackageReference privatizes direct prunable references
href: sdk/10.0/prune-packagereference-privateassets.md
- name: Windows Forms
items:
- name: API obsoletions
Expand Down
2 changes: 1 addition & 1 deletion docs/core/diagnostics/observability-applicationinsights.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ The same OTel initialization works for OTLP as for Application Insights, the dif

## 3. Specify the connection string

If you're not already an Azure customer, you can create a free account at [https://azure.microsoft.com/free/](https://azure.microsoft.com/free/). Log in to the Azure Portal, and either select an existing Application Insights resource or create a new one with [https://ms.portal.azure.com/#create/Microsoft.AppInsights](https://ms.portal.azure.com/#create/Microsoft.AppInsights).
If you're not already an Azure customer, you can create a free account at [https://azure.microsoft.com/free/](https://azure.microsoft.com/pricing/purchase-options/azure-account?cid=msft_learn). Log in to the Azure Portal, and either select an existing Application Insights resource or create a new one with [https://ms.portal.azure.com/#create/Microsoft.AppInsights](https://ms.portal.azure.com/#create/Microsoft.AppInsights).

Application Insights identifies which instance to use to store and process data through an instrumentation key and connection string that are found at the top right side of the portal UI.

Expand Down
Loading
Loading