From 0e45bf53260ee638f3c1be6cf386b7ce3823c610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Jare=C5=A1?= Date: Thu, 20 Nov 2025 16:31:57 +0100 Subject: [PATCH 01/14] Remove license notice from TRX (#49950) --- .../microsoft-testing-platform-extensions-test-reports.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/core/testing/microsoft-testing-platform-extensions-test-reports.md b/docs/core/testing/microsoft-testing-platform-extensions-test-reports.md index d4c5fe6392844..215ad765c96a2 100644 --- a/docs/core/testing/microsoft-testing-platform-extensions-test-reports.md +++ b/docs/core/testing/microsoft-testing-platform-extensions-test-reports.md @@ -16,9 +16,6 @@ A test report is a file that contains information about the execution and outcom The Visual Studio test result file (or TRX) is the default format for publishing test results. This extension is shipped as part of [Microsoft.Testing.Extensions.TrxReport](https://nuget.org/packages/Microsoft.Testing.Extensions.TrxReport) package. -> [!IMPORTANT] -> The package is shipped with Microsoft .NET library closed-source free to use licensing model. - The available options as follows: | Option | Description | From ccd47f02cb67b2015a311949731f70d4abd1151b Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 20 Nov 2025 10:43:27 -0500 Subject: [PATCH 02/14] Document breaking change for GetKeyedService and GetKeyedServices with AnyKey in .NET 10 Preview 3 (#50053) --- docs/core/compatibility/10.0.md | 1 + .../extensions/10.0/getkeyedservice-anykey.md | 57 +++++++++++++++++++ docs/core/compatibility/toc.yml | 2 + 3 files changed, 60 insertions(+) create mode 100644 docs/core/compatibility/extensions/10.0/getkeyedservice-anykey.md diff --git a/docs/core/compatibility/10.0.md b/docs/core/compatibility/10.0.md index 385de81807dd7..994060f75659e 100644 --- a/docs/core/compatibility/10.0.md +++ b/docs/core/compatibility/10.0.md @@ -78,6 +78,7 @@ If you're migrating an app to .NET 10, the breaking changes listed here might af | Title | Type of change | |-------|---------------------| | [BackgroundService runs all of ExecuteAsync as a Task](extensions/10.0/backgroundservice-executeasync-task.md) | Behavioral change | +| [Fix issues in GetKeyedService() and GetKeyedServices() with AnyKey](extensions/10.0/getkeyedservice-anykey.md) | Behavioral change | | [Null values preserved in configuration](extensions/10.0/configuration-null-values-preserved.md) | Behavioral change | | [Message no longer duplicated in Console log output](extensions/10.0/console-json-logging-duplicate-messages.md) | Behavioral change | | [ProviderAliasAttribute moved to Microsoft.Extensions.Logging.Abstractions assembly](extensions/10.0/provideraliasattribute-moved-assembly.md) | Source incompatible | diff --git a/docs/core/compatibility/extensions/10.0/getkeyedservice-anykey.md b/docs/core/compatibility/extensions/10.0/getkeyedservice-anykey.md new file mode 100644 index 0000000000000..835a5fcb1ba81 --- /dev/null +++ b/docs/core/compatibility/extensions/10.0/getkeyedservice-anykey.md @@ -0,0 +1,57 @@ +--- +title: "Breaking change: Fix issues in GetKeyedService() and GetKeyedServices() with AnyKey" +description: "Learn about the breaking change in .NET 10 where GetKeyedService() and GetKeyedServices() behavior changed when using KeyedService.AnyKey as the lookup key." +ms.date: 11/19/2025 +ai-usage: ai-assisted +--- + +# Fix issues in GetKeyedService() and GetKeyedServices() with AnyKey + +The behavior of the and methods in the `Microsoft.Extensions.DependencyInjection` library was updated to address inconsistencies in handling the registration. Specifically, `GetKeyedService()` now throws an exception when you attempt to resolve a single service using `KeyedService.AnyKey` as the lookup key, and `GetKeyedServices()` (plural) no longer returns `AnyKey` registrations when queried with `KeyedService.AnyKey`. + +## Version introduced + +.NET 10 + +## Previous behavior + +Previously, calling `GetKeyedService()` with `KeyedService.AnyKey` returned a service registration associated with `AnyKey`. This behavior was inconsistent with the intended semantics, as `AnyKey` is meant to represent a special case of keyed services rather than a specific registration. + +Calling `GetKeyedServices()` with `KeyedService.AnyKey` returned all registrations for `AnyKey`. This behavior was also inconsistent with the intended semantics, as `AnyKey` is not meant to enumerate all keyed services. + +## New behavior + +Starting in .NET 10, calling `GetKeyedService()` with `KeyedService.AnyKey` throws an . This ensures that `AnyKey` can't be used to resolve a single service, as it's intended to represent a special case rather than a specific key. + +```csharp +var service = serviceProvider.GetKeyedService(typeof(IMyService), KeyedService.AnyKey); +// Throws InvalidOperationException: "Cannot resolve a single service using AnyKey." +``` + +Additionally, calling `GetKeyedServices()` with `KeyedService.AnyKey` no longer returns registrations for `AnyKey`. Instead, it adheres to the updated semantics where `AnyKey` is treated as a special case and doesn't enumerate services. + +```csharp +var services = serviceProvider.GetKeyedServices(typeof(IMyService), KeyedService.AnyKey); +// Returns an empty collection. +``` + +## Type of breaking change + +This change is a [behavioral change](../../categories.md#behavioral-change). + +## Reason for change + +The previous behavior of `GetKeyedService()` and `GetKeyedServices()` with `KeyedService.AnyKey` was inconsistent with the intended semantics of `AnyKey`. The changes were introduced to ensure that `AnyKey` is treated as a special case and can't be used to resolve a single service, and to prevent `GetKeyedServices()` from returning `AnyKey` registrations when queried with `AnyKey`. These updates improve the predictability and correctness of the `Microsoft.Extensions.DependencyInjection` library's behavior when working with keyed services. For more details, see the [pull request](https://github.com/dotnet/runtime/pull/113137) and the associated [merge commit](https://github.com/dotnet/runtime/commit/deee462fc8421a7e18b8916eb5a5eacb9d09169d). + +## Recommended action + +If you use `GetKeyedService()` or `GetKeyedServices()` with `KeyedService.AnyKey`, review your code and update it to use specific keys instead of `AnyKey`. + +For `GetKeyedService(KeyedService.AnyKey)`, replace calls to `GetKeyedService()` with `KeyedService.AnyKey` with specific keys or alternative logic to handle service resolution. + +For `GetKeyedServices(KeyedService.AnyKey)`, replace calls to `GetKeyedServices()` with `KeyedService.AnyKey` with calls that use specific keys, or update your logic to enumerate only the services you intend to retrieve. + +## Affected APIs + +- +- diff --git a/docs/core/compatibility/toc.yml b/docs/core/compatibility/toc.yml index c06b689bde9a1..98e7aa1f57fe9 100644 --- a/docs/core/compatibility/toc.yml +++ b/docs/core/compatibility/toc.yml @@ -90,6 +90,8 @@ items: items: - name: BackgroundService runs all of ExecuteAsync as a Task href: extensions/10.0/backgroundservice-executeasync-task.md + - name: Fix issues in GetKeyedService() and GetKeyedServices() with AnyKey + href: extensions/10.0/getkeyedservice-anykey.md - name: Message no longer duplicated in Console log output href: extensions/10.0/console-json-logging-duplicate-messages.md - name: Null values preserved in configuration From fb47955745eb005ecd569e0d0fde09b69ef186d1 Mon Sep 17 00:00:00 2001 From: Drew Noakes Date: Fri, 21 Nov 2025 02:43:48 +1100 Subject: [PATCH 03/14] Update global.json example SDK version to 10.0.100 (#50065) Bump some version numbers to make these docs feel more up-to-date. Minor terminology change (ancestor vs. parent) --- docs/core/tools/global-json.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/core/tools/global-json.md b/docs/core/tools/global-json.md index cf343c3851629..52d89063aa5c1 100644 --- a/docs/core/tools/global-json.md +++ b/docs/core/tools/global-json.md @@ -12,18 +12,18 @@ ai-usage: ai-assisted The *global.json* file allows you to define which .NET SDK version is used when you run .NET CLI commands. Selecting the .NET SDK version is independent from specifying the runtime version a project targets. The .NET SDK version indicates which version of the .NET CLI is used. This article explains how to select the SDK version by using *global.json*. -If you always want to use the latest SDK version that is installed on your machine, no *global.json* file is needed. In CI (continuous integration) scenarios, however, you typically want to specify an acceptable range for the SDK version that is used. The *global.json* file has a `rollForward` feature that provides flexible ways to specify an acceptable range of versions. For example, the following *global.json* file selects 8.0.300 or any later [feature band or patch](../releases-and-support.md) for 8.0 that is installed on the machine: +If you always want to use the latest SDK version that is installed on your machine, no *global.json* file is needed. In CI (continuous integration) scenarios, however, you typically want to specify an acceptable range for the SDK version that is used. The *global.json* file has a `rollForward` feature that provides flexible ways to specify an acceptable range of versions. For example, the following *global.json* file selects 10.0.100 or any later [feature band or patch](../releases-and-support.md) for 10.0 that is installed on the machine: ```json { "sdk": { - "version": "8.0.300", + "version": "10.0.100", "rollForward": "latestFeature" } } ``` -The .NET SDK looks for a *global.json* file in the current working directory (which isn't necessarily the same as the project directory) or one of its parent directories. +The .NET SDK looks for a *global.json* file in the current working directory (which isn't necessarily the same as the project directory) or one of its ancestor directories. For information about specifying the runtime version instead of the SDK version, see [Target frameworks](../../standard/frameworks.md). @@ -43,8 +43,8 @@ The version of the .NET SDK to use. This field: -- Requires the full version number, such as 9.0.100. -- Doesn't support version numbers like 9, 9.0, or 9.0.x. +- Requires the full version number, such as 10.0.100. +- Doesn't support version numbers like 10, 10.0, or 10.0.x. - Doesn't have wildcard support. - Doesn't support version ranges. From e883cafdcddec6a2e32ac869b90f5ef118f4a760 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 20 Nov 2025 15:49:56 +0000 Subject: [PATCH 04/14] Fix outdated statement about record types always being reference types (#50054) * Initial plan * Fix outdated statement about record types being reference types Co-authored-by: gewarren <24882762+gewarren@users.noreply.github.com> * Apply suggestions from code review --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: gewarren <24882762+gewarren@users.noreply.github.com> Co-authored-by: Bill Wagner --- docs/csharp/fundamentals/types/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/csharp/fundamentals/types/index.md b/docs/csharp/fundamentals/types/index.md index 209be162b385e..7bd6f7b6b1d93 100644 --- a/docs/csharp/fundamentals/types/index.md +++ b/docs/csharp/fundamentals/types/index.md @@ -71,7 +71,7 @@ One of the first decisions you make when defining a type is deciding which const It's important to understand two fundamental points about the type system in .NET: - It supports the principle of inheritance. Types can derive from other types, called *base types*. The derived type inherits (with some restrictions) the methods, properties, and other members of the base type. The base type can in turn derive from some other type, in which case the derived type inherits the members of both base types in its inheritance hierarchy. All types, including built-in numeric types such as (C# keyword: `int`), derive ultimately from a single base type, which is (C# keyword: [`object`](../../language-reference/builtin-types/reference-types.md)). This unified type hierarchy is called the [Common Type System](../../../standard/base-types/common-type-system.md) (CTS). For more information about inheritance in C#, see [Inheritance](../object-oriented/inheritance.md). -- Each type in the CTS is defined as either a *value type* or a *reference type*. These types include all custom types in the .NET class library and also your own user-defined types. Types that you define by using the `struct` keyword are value types; all the built-in numeric types are `structs`. Types that you define by using the `class` or `record` keyword are reference types. Reference types and value types have different compile-time rules, and different run-time behavior. +- Each type in the CTS is defined as either a *value type* or a *reference type*. These types include all custom types in the .NET class library and also your own user-defined types. Types that you define by using the `struct` or `record struct` keywords are value types; all the built-in numeric types are `structs`. Types that you define by using the `class`, `record class`, or `record` keywords are reference types. Reference types and value types have different compile-time rules, and different run-time behavior. The following illustration shows the relationship between value types and reference types in the CTS. @@ -124,7 +124,7 @@ All enums inherit from , which in ### Reference types -A type that is defined as a `class`, `record`, [`delegate`](../../language-reference/builtin-types/reference-types.md), array, or [`interface`](../../language-reference/keywords/interface.md) is a [`reference type`](../../language-reference/keywords/reference-types.md). +A type that is defined as a `class`, `record class`, `record`, [`delegate`](../../language-reference/builtin-types/reference-types.md), array, or [`interface`](../../language-reference/keywords/interface.md) is a [`reference type`](../../language-reference/keywords/reference-types.md). When you declare a variable of a [`reference type`](../../language-reference/keywords/reference-types.md), it contains the value [`null`](../../language-reference/keywords/null.md) until you assign it with an instance of that type or create one using the [`new`](../../language-reference/operators/new-operator.md) operator. Creation and assignment of a class are demonstrated in the following example: From afdcd0ceb8ca6751dffc6288701c4db57efc4f21 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Thu, 20 Nov 2025 07:50:41 -0800 Subject: [PATCH 05/14] add note about version (#50058) --- docs/core/testing/unit-testing-fsharp-with-xunit.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/core/testing/unit-testing-fsharp-with-xunit.md b/docs/core/testing/unit-testing-fsharp-with-xunit.md index 064366680b4e4..b1b5c8a8e5261 100644 --- a/docs/core/testing/unit-testing-fsharp-with-xunit.md +++ b/docs/core/testing/unit-testing-fsharp-with-xunit.md @@ -62,6 +62,9 @@ The test project requires other packages to create and run unit tests. `dotnet n dotnet reference add ../MathService/MathService.fsproj ``` +> [!TIP] +> If you're using .NET 9 SDK or earlier, use the "verb first" form (`dotnet add reference`) instead. The "noun first" form was introduced in .NET 10. + You can see the entire file in the [samples repository](https://github.com/dotnet/samples/blob/main/core/getting-started/unit-testing-with-fsharp/MathService.Tests/MathService.Tests.fsproj) on GitHub. You have the following final solution layout: From 626bcab34511702c01d46e955db380c54855a32b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Jare=C5=A1?= Date: Thu, 20 Nov 2025 16:53:44 +0100 Subject: [PATCH 06/14] Document AzureDevOps plugin (#49949) * Document AzureDevOps plugin * Fix linter * Remove license notice * Add to table and re-format * Update unit-testing-mstest-sdk.md * Update docs/core/testing/microsoft-testing-platform-extensions-test-reports.md * Apply suggestion from @nohwnd * Apply suggestions from code review * Update docs/core/testing/microsoft-testing-platform-extensions-test-reports.md --------- Co-authored-by: Bill Wagner --- .../testing/media/test-azdoreport-failure.png | Bin 0 -> 132066 bytes ...esting-platform-extensions-test-reports.md | 30 ++++++++++++++++++ docs/core/testing/unit-testing-mstest-sdk.md | 25 ++++++++------- 3 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 docs/core/testing/media/test-azdoreport-failure.png diff --git a/docs/core/testing/media/test-azdoreport-failure.png b/docs/core/testing/media/test-azdoreport-failure.png new file mode 100644 index 0000000000000000000000000000000000000000..bc31b5c5a6d20c162a8021e6eb79ed1d7a9ab437 GIT binary patch literal 132066 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 {U3VsewT{ZyrNKU&*(({?rfLDg958^|979Qr7c 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 EA4PR}hyVZp literal 0 HcmV?d00001 diff --git a/docs/core/testing/microsoft-testing-platform-extensions-test-reports.md b/docs/core/testing/microsoft-testing-platform-extensions-test-reports.md index 215ad765c96a2..c3de71910cd24 100644 --- a/docs/core/testing/microsoft-testing-platform-extensions-test-reports.md +++ b/docs/core/testing/microsoft-testing-platform-extensions-test-reports.md @@ -24,3 +24,33 @@ The available options as follows: | `--report-trx-filename` | The name of the generated TRX report. The default name matches the following format `__.trx`. | The report is saved inside the default _TestResults_ folder that can be specified through the `--results-directory` command line argument. + +## Azure DevOps reports + +Azure DevOps report plugin enhances test running for developers that host their code on GitHub, but build on Azure DevOps build agents. It adds additional information to failures to show failure directly in GitHub PR. + +![Error annotation in GitHub PR files view](./media/test-azdoreport-failure.png) + +The extension is shipped in [Microsoft.Testing.Extensions.AzureDevOpsReport](https://nuget.org/packages/Microsoft.Testing.Extensions.AzureDevOpsReport) package. + +The available options as follows: + +| Option | Description | +|--|--| +| `--report-azdo` | Enable outputting errors / warnings in CI builds. | +| `--report-azdo-severity` | Severity to use for the reported event. Options are: `error` (default) and `warning`. | + +The extension automatically detects that it is running in continuous integration (CI) environment by checking the `TF_BUILD` environment variable. + +### Determining the line to report + +To highlight the correct line in code where failure occurred, AzureDevOps report plugin searches the error stacktrace for a file that exists in the current repository. + +To determine this it: + +- finds the repository root, this is done by searching the `.git` directory closest to the location from where the test application is started (as determined by `AppContext.BaseDirectory`). +- finds the first line in stack trace that has file location and line (the library needs to have debug symbols). +- excludes all files that end with `Assert.cs` to avoid showing details of your assertion implementations or wrappers. +- excludes all files that don't exist on disk (typically those are lines from external libraries that ship debug symbols e.g. MSTest). + +(These are internal details that serve to aid debugging the behavior and might change in the future.) diff --git a/docs/core/testing/unit-testing-mstest-sdk.md b/docs/core/testing/unit-testing-mstest-sdk.md index df8566a175799..df51a1d4f10a1 100644 --- a/docs/core/testing/unit-testing-mstest-sdk.md +++ b/docs/core/testing/unit-testing-mstest-sdk.md @@ -104,6 +104,7 @@ You can set the profile using the property `TestingExtensionsProfile` with one o * [Hot Reload](./microsoft-testing-platform-extensions-hosting.md#hot-reload) * [Retry](./microsoft-testing-platform-extensions-policy.md#retry) * [Trx Report](./microsoft-testing-platform-extensions-test-reports.md#visual-studio-test-reports) + * [AzureDevOpsReport](./microsoft-testing-platform-extensions-test-reports.md#azure-devops-reports) Here's a full example, using the `None` profile: @@ -118,17 +119,19 @@ Here's a full example, using the `None` profile: ``` -| Extension/Profile | None | Default | AllMicrosoft | -|-------------------------------------------------------------------------------------------|:----:|:------------------:|:--------------------------------------:| -| [Code Coverage](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CodeCoverage) | | :heavy_check_mark: | :heavy_check_mark: | -| [Crash Dump](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CrashDump) | | | :heavy_check_mark: | -| [Fakes](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Fakes) | | | :heavy_check_mark:† | -| [Hang Dump](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HangDump) | | | :heavy_check_mark: | -| [Hot Reload](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HotReload) | | | :heavy_check_mark: | -| [Retry](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry) | | | :heavy_check_mark: | -| [Trx](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport) | | :heavy_check_mark: | :heavy_check_mark: | - -† MSTest.Sdk 3.7.0+ +| Extension/Profile | None | Default | AllMicrosoft | +| ------------------------------------------------------------------------------------------------- | :---: | :----------------: | :-----------------: | +| [Code Coverage](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CodeCoverage) | | :heavy_check_mark: | :heavy_check_mark: | +| [Crash Dump](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CrashDump) | | | :heavy_check_mark: | +| [Fakes](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Fakes) | | | :heavy_check_mark:¹ | +| [Hang Dump](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HangDump) | | | :heavy_check_mark: | +| [Hot Reload](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HotReload) | | | :heavy_check_mark: | +| [Retry](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry) | | | :heavy_check_mark: | +| [Trx](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport) | | :heavy_check_mark: | :heavy_check_mark: | +| [AzureDevOpsReport](./microsoft-testing-platform-extensions-test-reports.md#azure-devops-reports) | | | :heavy_check_mark:² | + +¹ MSTest.Sdk 3.7.0+ +² MSTest.Sdk 3.11.0+ ### Enable or disable extensions From 3862c0befab11888d08a42b0167ada6e84c31c6f Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 20 Nov 2025 17:12:06 +0100 Subject: [PATCH 07/14] Update copilot-instructions with executable guidelines (#50067) * Update copilot-instructions with executable guidelines Added instructions for encapsulating code in standalone executables and including PR commentary. * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply suggestion from @T-Gro * Update .github/copilot-instructions.md --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Bill Wagner --- .github/copilot-instructions.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index e3a5e7f6ad9cf..7c3fa1b632662 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -44,6 +44,7 @@ For snippets >6 lines: 1. All code should use the latest stable versions/features. 1. Create examples in both C# and Visual Basic unless the article referencing the snippet resides in the in the `csharp`, `fsharp`, and `visual-basic` language folders. 1. When you add code, use code comments sparingly because they don't get localized. You can use them to briefly clarify code-specific details (such as logic, parameters, or edge cases). Put any critical information and context in the markdown text of the referencing article. +1. IMPORTANT: For created code, always try to encapsulate it in an standalone executable (e.g. `dotnet fsi myFile.fsx` or `dotnet run myFile.cs`, add the necessary boilerplate/imports/usings where needed, and execute it.). Run it, and for every code snippet, include a PR commentary checking each code sample and proving what it has produced - this can be diagnostics, standard output, or a result value. That standalone file is just for the purpose of verification within copilot's execution environment, the published docs snippet should remain a subset as you would normally write to maximize clarity. ## File Naming @@ -69,4 +70,4 @@ When assigned an issue or directly given a task in GitHub: 3. Check for build warnings in the OpenPublishing.Build status check 4. If warnings exist: - Click "View Details" to open the build report - - Resolve any build warnings you introduced \ No newline at end of file + - Resolve any build warnings you introduced From cee09eda682cdf38180432608bd821323a1f9523 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Thu, 20 Nov 2025 10:01:36 -0800 Subject: [PATCH 08/14] Update package index with latest published versions (#50062) --- docs/azure/includes/dotnet-all.md | 2 +- docs/azure/includes/dotnet-new.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/azure/includes/dotnet-all.md b/docs/azure/includes/dotnet-all.md index ecb9ed9db6468..49169ff2093c2 100644 --- a/docs/azure/includes/dotnet-all.md +++ b/docs/azure/includes/dotnet-all.md @@ -124,7 +124,7 @@ | WCF Storage Queues | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/Microsoft.WCF.Azure.StorageQueues/1.0.0-beta.1) | [docs](/dotnet/api/overview/azure/Microsoft.WCF.Azure.StorageQueues-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.WCF.Azure.StorageQueues_1.0.0-beta.1/sdk/extension-wcf/Microsoft.WCF.Azure.StorageQueues/) | | Web PubSub | NuGet [1.6.0](https://www.nuget.org/packages/Azure.Messaging.WebPubSub/1.6.0) | [docs](/dotnet/api/overview/azure/Messaging.WebPubSub-readme) | GitHub [1.6.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.WebPubSub_1.6.0/sdk/webpubsub/Azure.Messaging.WebPubSub/) | | Web PubSub Client | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Messaging.WebPubSub.Client/1.0.0) | [docs](/dotnet/api/overview/azure/Messaging.WebPubSub.Client-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.WebPubSub.Client_1.0.0/sdk/webpubsub/Azure.Messaging.WebPubSub.Client/) | -| Azure client library integration for ASP.NET Core | NuGet [1.13.0](https://www.nuget.org/packages/Microsoft.Extensions.Azure/1.13.0) | [docs](/dotnet/api/overview/azure/Microsoft.Extensions.Azure-readme) | GitHub [1.13.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Extensions.Azure_1.13.0/sdk/extensions/Microsoft.Extensions.Azure/) | +| Azure client library integration for ASP.NET Core | NuGet [1.13.1](https://www.nuget.org/packages/Microsoft.Extensions.Azure/1.13.1) | [docs](/dotnet/api/overview/azure/Microsoft.Extensions.Azure-readme) | GitHub [1.13.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Extensions.Azure_1.13.1/sdk/extensions/Microsoft.Extensions.Azure/) | | Blob Storage Key Store for .NET Data Protection | NuGet [1.5.1](https://www.nuget.org/packages/Azure.Extensions.AspNetCore.DataProtection.Blobs/1.5.1) | [docs](/dotnet/api/overview/azure/Extensions.AspNetCore.DataProtection.Blobs-readme) | GitHub [1.5.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Extensions.AspNetCore.DataProtection.Blobs_1.5.1/sdk/extensions/Azure.Extensions.AspNetCore.DataProtection.Blobs/) | | CloudNative CloudEvents with Event Grid | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents/1.0.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents_1.0.0/sdk/eventgrid/Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents/) | | Core - Client - Spatial | NuGet [1.1.0](https://www.nuget.org/packages/Microsoft.Azure.Core.Spatial/1.1.0)
NuGet [1.2.0-beta.1](https://www.nuget.org/packages/Microsoft.Azure.Core.Spatial/1.2.0-beta.1) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.Core.Spatial-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Core.Spatial_1.1.0/sdk/core/Microsoft.Azure.Core.Spatial/)
GitHub [1.2.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Core.Spatial_1.2.0-beta.1/sdk/core/Microsoft.Azure.Core.Spatial/) | diff --git a/docs/azure/includes/dotnet-new.md b/docs/azure/includes/dotnet-new.md index 4327af08ac7b5..1f3be21bfd64b 100644 --- a/docs/azure/includes/dotnet-new.md +++ b/docs/azure/includes/dotnet-new.md @@ -134,7 +134,7 @@ | WCF Storage Queues | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/Microsoft.WCF.Azure.StorageQueues/1.0.0-beta.1) | [docs](/dotnet/api/overview/azure/Microsoft.WCF.Azure.StorageQueues-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.WCF.Azure.StorageQueues_1.0.0-beta.1/sdk/extension-wcf/Microsoft.WCF.Azure.StorageQueues/) | | Web PubSub | NuGet [1.6.0](https://www.nuget.org/packages/Azure.Messaging.WebPubSub/1.6.0) | [docs](/dotnet/api/overview/azure/Messaging.WebPubSub-readme) | GitHub [1.6.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.WebPubSub_1.6.0/sdk/webpubsub/Azure.Messaging.WebPubSub/) | | Web PubSub Client | NuGet [1.0.0](https://www.nuget.org/packages/Azure.Messaging.WebPubSub.Client/1.0.0) | [docs](/dotnet/api/overview/azure/Messaging.WebPubSub.Client-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Messaging.WebPubSub.Client_1.0.0/sdk/webpubsub/Azure.Messaging.WebPubSub.Client/) | -| Azure client library integration for ASP.NET Core | NuGet [1.13.0](https://www.nuget.org/packages/Microsoft.Extensions.Azure/1.13.0) | [docs](/dotnet/api/overview/azure/Microsoft.Extensions.Azure-readme) | GitHub [1.13.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Extensions.Azure_1.13.0/sdk/extensions/Microsoft.Extensions.Azure/) | +| Azure client library integration for ASP.NET Core | NuGet [1.13.1](https://www.nuget.org/packages/Microsoft.Extensions.Azure/1.13.1) | [docs](/dotnet/api/overview/azure/Microsoft.Extensions.Azure-readme) | GitHub [1.13.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Extensions.Azure_1.13.1/sdk/extensions/Microsoft.Extensions.Azure/) | | Blob Storage Key Store for .NET Data Protection | NuGet [1.5.1](https://www.nuget.org/packages/Azure.Extensions.AspNetCore.DataProtection.Blobs/1.5.1) | [docs](/dotnet/api/overview/azure/Extensions.AspNetCore.DataProtection.Blobs-readme) | GitHub [1.5.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Extensions.AspNetCore.DataProtection.Blobs_1.5.1/sdk/extensions/Azure.Extensions.AspNetCore.DataProtection.Blobs/) | | CloudNative CloudEvents with Event Grid | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents/1.0.0) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents-readme) | GitHub [1.0.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents_1.0.0/sdk/eventgrid/Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents/) | | Core - Client - Spatial | NuGet [1.1.0](https://www.nuget.org/packages/Microsoft.Azure.Core.Spatial/1.1.0)
NuGet [1.2.0-beta.1](https://www.nuget.org/packages/Microsoft.Azure.Core.Spatial/1.2.0-beta.1) | [docs](/dotnet/api/overview/azure/Microsoft.Azure.Core.Spatial-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Core.Spatial_1.1.0/sdk/core/Microsoft.Azure.Core.Spatial/)
GitHub [1.2.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Microsoft.Azure.Core.Spatial_1.2.0-beta.1/sdk/core/Microsoft.Azure.Core.Spatial/) | From c4ede722ef3a867850212cd1c53356da1e0c1870 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Thu, 20 Nov 2025 10:14:30 -0800 Subject: [PATCH 09/14] Change package installation instructions to dotnet CLI (#50059) --- .../observability-prgrja-example.md | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/docs/core/diagnostics/observability-prgrja-example.md b/docs/core/diagnostics/observability-prgrja-example.md index d3506bb961a08..263d5e0a8f143 100644 --- a/docs/core/diagnostics/observability-prgrja-example.md +++ b/docs/core/diagnostics/observability-prgrja-example.md @@ -36,21 +36,16 @@ The following code defines a new metric (`greetings.count`) for the number of ti Use the NuGet Package Manager or command line to add the following NuGet packages: -```xml - - - - - - - - - +```dotnetcli +dotnet add package OpenTelemetry.Exporter.Console +dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol +dotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore +dotnet add package OpenTelemetry.Exporter.Zipkin +dotnet add package OpenTelemetry.Extensions.Hosting +dotnet add package OpenTelemetry.Instrumentation.AspNetCore +dotnet add package OpenTelemetry.Instrumentation.Http ``` -> [!NOTE] -> Use the latest versions, as the OTel APIs are constantly evolving. - ## 5. Configure OpenTelemetry with the correct providers :::code language="csharp" source="snippets/OTel-Prometheus-Grafana-Jaeger/csharp/Program.cs" id="Snippet_OTEL"::: From c4a7191044dbb6b5e5285cab5f99068b28b2a6da Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 20 Nov 2025 10:46:53 -0800 Subject: [PATCH 10/14] Fix .NET 10 CLI auto-completion command from 'generate' to 'script' (#50050) * Initial plan * Fix .NET 10 CLI auto completion command from 'generate' to 'script' Co-authored-by: meaghanlewis <10103121+meaghanlewis@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: meaghanlewis <10103121+meaghanlewis@users.noreply.github.com> --- docs/core/tools/enable-tab-autocomplete.md | 14 +++++++------- docs/core/whats-new/dotnet-10/sdk.md | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/core/tools/enable-tab-autocomplete.md b/docs/core/tools/enable-tab-autocomplete.md index 5ea6ce26c1f26..5ae6e350908a9 100644 --- a/docs/core/tools/enable-tab-autocomplete.md +++ b/docs/core/tools/enable-tab-autocomplete.md @@ -20,10 +20,10 @@ Starting with .NET 10, the .NET CLI includes native shell completion scripts tha ### Generate completion scripts -Use the `dotnet completions generate` command to generate a completion script for your shell: +Use the `dotnet completions script` command to generate a completion script for your shell: ```console -dotnet completions generate [SHELL] +dotnet completions script [SHELL] ``` The `[SHELL]` parameter accepts one of the following values: @@ -62,7 +62,7 @@ Add the appropriate command to your shell's profile to enable native completions Add the following line to your PowerShell profile (`$PROFILE`): ```powershell -dotnet completions generate pwsh | Out-String | Invoke-Expression +dotnet completions script pwsh | Out-String | Invoke-Expression ``` #### Bash @@ -70,7 +70,7 @@ dotnet completions generate pwsh | Out-String | Invoke-Expression Add the following line to your `.bashrc` file: ```bash -eval "$(dotnet completions generate bash)" +eval "$(dotnet completions script bash)" ``` #### Zsh @@ -78,7 +78,7 @@ eval "$(dotnet completions generate bash)" Add the following line to your `.zshrc` file: ```zsh -eval "$(dotnet completions generate zsh)" +eval "$(dotnet completions script zsh)" ``` #### Fish @@ -86,7 +86,7 @@ eval "$(dotnet completions generate zsh)" Add the following line to your `config.fish` file: ```fish -dotnet completions generate fish | source +dotnet completions script fish | source ``` #### Nushell @@ -94,7 +94,7 @@ dotnet completions generate fish | source Add the following to the beginning of your `config.nu` file: ```nu -dotnet completions generate nushell | save -f ~/.local/share/nushell/completions/dotnet.nu +dotnet completions script nushell | save -f ~/.local/share/nushell/completions/dotnet.nu use ~/.local/share/nushell/completions/dotnet.nu * ``` diff --git a/docs/core/whats-new/dotnet-10/sdk.md b/docs/core/whats-new/dotnet-10/sdk.md index 4c7acfff1c9da..4dab76b974366 100644 --- a/docs/core/whats-new/dotnet-10/sdk.md +++ b/docs/core/whats-new/dotnet-10/sdk.md @@ -251,10 +251,10 @@ The `--interactive` flag is now enabled by default for CLI commands in interacti ## Native shell tab-completion scripts -The `dotnet` CLI now supports generating native tab-completion scripts for popular shells using the `dotnet completions generate [SHELL]` command. Supported shells include `bash`, `fish`, `nushell`, `powershell`, and `zsh`. These scripts improve usability by providing faster and more integrated tab-completion features. For example, in PowerShell, you can enable completions by adding the following to your `$PROFILE`: +The `dotnet` CLI now supports generating native tab-completion scripts for popular shells using the `dotnet completions script [SHELL]` command. Supported shells include `bash`, `fish`, `nushell`, `powershell`, and `zsh`. These scripts improve usability by providing faster and more integrated tab-completion features. For example, in PowerShell, you can enable completions by adding the following to your `$PROFILE`: ```powershell -dotnet completions script pwsh | out-String | Invoke-Expression -ErrorAction SilentlyContinue +dotnet completions script pwsh | Out-String | Invoke-Expression ``` ## Console apps can natively create container images From 10d47ea86bc5dd1ee63382f514bc1d73e1fc4076 Mon Sep 17 00:00:00 2001 From: Bill Wagner Date: Thu, 20 Nov 2025 14:13:56 -0500 Subject: [PATCH 11/14] put inputs into env (#50071) * put inputs into env Instead of raw input from workflow_dispatch, import those inputs into the environment before using. * Apply suggestions from code review * Apply suggestions from code review --- .github/workflows/dependabot-bot.yml | 4 +++- .github/workflows/quest-bulk.yml | 4 +++- .github/workflows/quest.yml | 7 +++++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dependabot-bot.yml b/.github/workflows/dependabot-bot.yml index 4037629d8e59f..2a68abe8e9bea 100644 --- a/.github/workflows/dependabot-bot.yml +++ b/.github/workflows/dependabot-bot.yml @@ -40,7 +40,9 @@ jobs: - name: "Print manual run reason" if: ${{ github.event_name == 'workflow_dispatch' }} run: | - echo "Reason: ${{ github.event.inputs.reason }}" + echo "Reason: $REASON" + env: + REASON: ${{ github.event.inputs.reason }} # Run the .NET dependabot-bot tool - name: dependabot-bot id: dependabot-bot diff --git a/.github/workflows/quest-bulk.yml b/.github/workflows/quest-bulk.yml index b8900f7c9c3b7..6fd60faafb767 100644 --- a/.github/workflows/quest-bulk.yml +++ b/.github/workflows/quest-bulk.yml @@ -35,7 +35,9 @@ jobs: - name: "Print manual bulk import run reason" if: ${{ github.event_name == 'workflow_dispatch' }} run: | - echo "Reason: ${{ github.event.inputs.reason }}" + echo "Reason: $REASON" + env: + REASON: ${{ github.event.inputs.reason }} - name: Azure OpenID Connect id: azure-oidc-auth diff --git a/.github/workflows/quest.yml b/.github/workflows/quest.yml index 4fbcd659d63f5..e30dbc5b9390a 100644 --- a/.github/workflows/quest.yml +++ b/.github/workflows/quest.yml @@ -36,8 +36,11 @@ jobs: - name: "Print manual run reason" if: ${{ github.event_name == 'workflow_dispatch' }} run: | - echo "Reason: ${{ github.event.inputs.reason }}" - echo "Issue number: ${{ github.event.inputs.issue }}" + echo "Reason: $REASON" + echo "Issue number: $ISSUENUMBER" + env: + REASON: ${{ github.event.inputs.reason }} + ISSUENUMBER: ${{ github.event.inputs.issue }} - name: Azure OpenID Connect id: azure-oidc-auth From bb0520d5730f001a7cb0db6e4463374588b33bde Mon Sep 17 00:00:00 2001 From: Barbara Rosiak <76071368+barosiak@users.noreply.github.com> Date: Thu, 20 Nov 2025 13:59:23 -0800 Subject: [PATCH 12/14] Update doc on profiling config settings (#49964) Move profiler documentation from the runtime repo to the docs repo. Add description of new possible environment variable names. Fixes #49963 --------- Co-authored-by: Noah Falk Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> --- .../runtime-config/debugging-profiling.md | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/docs/core/runtime-config/debugging-profiling.md b/docs/core/runtime-config/debugging-profiling.md index 13cdea3ccba28..60f9de723910f 100644 --- a/docs/core/runtime-config/debugging-profiling.md +++ b/docs/core/runtime-config/debugging-profiling.md @@ -9,6 +9,9 @@ This article details the settings you can use to configure .NET debugging and pr [!INCLUDE [complus-prefix](../../../includes/complus-prefix.md)] +> [!NOTE] +> Starting in .NET 11, profiler environment variables now support both `DOTNET` and `CORECLR` prefixes. The `DOTNET` prefix is the new standard, while `CORECLR` is maintained for backwards compatibility and might be removed in the future. + ## Enable diagnostics - Configures whether the debugger, the profiler, and EventPipe diagnostics are enabled or disabled. @@ -23,11 +26,12 @@ This article details the settings you can use to configure .NET debugging and pr - Configures whether profiling is enabled for the currently running process. - If you omit this setting, profiling is disabled. This is equivalent to setting the value to `0`. +- To load a profiler, in addition to enabling profiling, the profiler GUID and profiler location also need to be configured using these settings. | | Setting name | Values | | - | - | - | | **runtimeconfig.json** | N/A | N/A | -| **Environment variable** | `CORECLR_ENABLE_PROFILING` | `0` - disabled
`1` - enabled | +| **Environment variable** | `CORECLR_ENABLE_PROFILING` or `DOTNET_ENABLE_PROFILING` | `0` - disabled
`1` - enabled | ## Profiler GUID @@ -36,19 +40,28 @@ This article details the settings you can use to configure .NET debugging and pr | | Setting name | Values | | - | - | - | | **runtimeconfig.json** | N/A | N/A | -| **Environment variable** | `CORECLR_PROFILER` | *string-guid* | +| **Environment variable** | `CORECLR_PROFILER` or `DOTNET_PROFILER` | *string-guid* | ## Profiler location +Once profiling is enabled, the profiler can be loaded in two ways: with environment variables (cross-plat) or through the registry (Windows only). The profiler path environment variables take precedence over any COM library path in the registry if both are specified. + +### Environment variable (cross-plat) + - Specifies the path to the profiler DLL to load into the currently running process (or 32-bit or 64-bit process). - If more than one variable is set, the bitness-specific variables take precedence. They specify which bitness of profiler to load. -- For more information, see [Finding the profiler library](https://github.com/dotnet/runtime/blob/main/docs/design/coreclr/profiling/Profiler%20Loading.md). | | Setting name | Values | | - | - | - | -| **Environment variable** | `CORECLR_PROFILER_PATH` | *string-path* | -| **Environment variable** | `CORECLR_PROFILER_PATH_32` | *string-path* | -| **Environment variable** | `CORECLR_PROFILER_PATH_64` | *string-path* | +| **Environment variable** | `CORECLR_PROFILER_PATH` or `DOTNET_PROFILER_PATH` | *string-path* | +| **Environment variable** | `CORECLR_PROFILER_PATH_32` or `DOTNET_PROFILER_PATH_32` | *string-path* | +| **Environment variable** | `CORECLR_PROFILER_PATH_64` or `DOTNET_PROFILER_PATH_64` | *string-path* | +| **Environment variable** | `CORECLR_PROFILER_PATH_ARM32` or `DOTNET_PROFILER_PATH_ARM32` | *string-path* | +| **Environment variable** | `CORECLR_PROFILER_PATH_ARM64` or `DOTNET_PROFILER_PATH_ARM64` | *string-path* | + +### Through the registry (Windows only) + +When the `DOTNET_PROFILER_PATH*` [environment variables](#environment-variable-cross-plat) aren't set while running on Windows, coreclr looks up the CLSID from `DOTNET_PROFILER` in the registry to find the full path to the profiler's DLL. Just like with any COM server DLL, the profiler's CLSID is looked up under HKEY_CLASSES_ROOT, which merges the classes from HKLM and HKCU. ## Export perf maps and jit dumps From 290450426765b1affa3430d6408d7b631d224e02 Mon Sep 17 00:00:00 2001 From: Bill Wagner Date: Thu, 20 Nov 2025 18:03:41 -0500 Subject: [PATCH 13/14] Add custom metadata for compound assignment tutorial (#50075) Add tag for peer review tracking. --- docs/csharp/whats-new/tutorials/compound-assignment-operators.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/csharp/whats-new/tutorials/compound-assignment-operators.md b/docs/csharp/whats-new/tutorials/compound-assignment-operators.md index b0ec9ec4faa36..db0c96febd3ca 100644 --- a/docs/csharp/whats-new/tutorials/compound-assignment-operators.md +++ b/docs/csharp/whats-new/tutorials/compound-assignment-operators.md @@ -7,6 +7,7 @@ ms.service: dotnet-csharp ms.topic: tutorial ms.date: 11/14/2025 ai-usage: ai-assisted +ms.custom: peer-review-program #customer intent: As a C# developer, I want to implement user-defined instance compound assignment operators so that my algorithms are more efficient. --- # Tutorial: Create compound assignment operators From 7753ddf37cb81c29e85ad598c89b1636e89d6884 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 20 Nov 2025 17:37:22 -0800 Subject: [PATCH 14/14] Add hosting integration section to text-to-image quickstart (#49896) --- .../snippets/text-to-image/hosting/Program.cs | 44 ++++++++++++++ .../hosting/Properties/launchSettings.json | 23 ++++++++ .../hosting/TextToImageHosting.csproj | 17 ++++++ .../hosting/appsettings.Development.json | 8 +++ .../text-to-image/hosting/appsettings.json | 12 ++++ docs/ai/quickstarts/text-to-image.md | 59 +++++++++++++++++++ 6 files changed, 163 insertions(+) create mode 100644 docs/ai/quickstarts/snippets/text-to-image/hosting/Program.cs create mode 100644 docs/ai/quickstarts/snippets/text-to-image/hosting/Properties/launchSettings.json create mode 100644 docs/ai/quickstarts/snippets/text-to-image/hosting/TextToImageHosting.csproj create mode 100644 docs/ai/quickstarts/snippets/text-to-image/hosting/appsettings.Development.json create mode 100644 docs/ai/quickstarts/snippets/text-to-image/hosting/appsettings.json diff --git a/docs/ai/quickstarts/snippets/text-to-image/hosting/Program.cs b/docs/ai/quickstarts/snippets/text-to-image/hosting/Program.cs new file mode 100644 index 0000000000000..3f23739b7127e --- /dev/null +++ b/docs/ai/quickstarts/snippets/text-to-image/hosting/Program.cs @@ -0,0 +1,44 @@ +// +using Aspire.Azure.AI.OpenAI; +using Microsoft.Extensions.AI; +using OpenAI; + +WebApplicationBuilder builder = WebApplication.CreateBuilder(args); + +// Add the Azure OpenAI client using hosting integration. +AspireAzureOpenAIClientBuilder openai = builder.AddAzureOpenAIClient("openai"); +// + +// +// Register the image generator with dependency injection. +ImageGeneratorBuilder imageBuilder = builder.Services.AddImageGenerator(services => +{ + OpenAIClient openAiClient = services.GetRequiredService(); + OpenAI.Images.ImageClient imageClient = openAiClient.GetImageClient("gpt-image-1"); + #pragma warning disable MEAI001 // Type is for evaluation purposes only. + return imageClient.AsIImageGenerator(); + #pragma warning restore MEAI001 +}); +// + +// +imageBuilder.ConfigureOptions(options => +{ + options.MediaType = "image/png"; +}).UseLogging(); +// + +WebApplication app = builder.Build(); + +// +// Use the image generator in an endpoint. +app.MapPost("/generate-image", async (IImageGenerator generator, string prompt) => +{ + ImageGenerationResponse response = await generator.GenerateImagesAsync(prompt); + DataContent dataContent = response.Contents.OfType().First(); + + return Results.File(dataContent.Data.ToArray(), "image/png"); +}); +// + +app.Run(); diff --git a/docs/ai/quickstarts/snippets/text-to-image/hosting/Properties/launchSettings.json b/docs/ai/quickstarts/snippets/text-to-image/hosting/Properties/launchSettings.json new file mode 100644 index 0000000000000..a320d48079109 --- /dev/null +++ b/docs/ai/quickstarts/snippets/text-to-image/hosting/Properties/launchSettings.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5219", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7210;http://localhost:5219", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/docs/ai/quickstarts/snippets/text-to-image/hosting/TextToImageHosting.csproj b/docs/ai/quickstarts/snippets/text-to-image/hosting/TextToImageHosting.csproj new file mode 100644 index 0000000000000..63a42a18ed6ad --- /dev/null +++ b/docs/ai/quickstarts/snippets/text-to-image/hosting/TextToImageHosting.csproj @@ -0,0 +1,17 @@ + + + + net10.0 + enable + enable + $(NoWarn);MEAI001 + a9e545e9-e2b5-4e1b-81ce-217ca2d281c6 + + + + + + + + + diff --git a/docs/ai/quickstarts/snippets/text-to-image/hosting/appsettings.Development.json b/docs/ai/quickstarts/snippets/text-to-image/hosting/appsettings.Development.json new file mode 100644 index 0000000000000..0c208ae9181e5 --- /dev/null +++ b/docs/ai/quickstarts/snippets/text-to-image/hosting/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/docs/ai/quickstarts/snippets/text-to-image/hosting/appsettings.json b/docs/ai/quickstarts/snippets/text-to-image/hosting/appsettings.json new file mode 100644 index 0000000000000..2a36d2d501808 --- /dev/null +++ b/docs/ai/quickstarts/snippets/text-to-image/hosting/appsettings.json @@ -0,0 +1,12 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "ConnectionStrings": { + "openai": "Endpoint=https://your-endpoint.com/;Key=your-api-key" + } +} diff --git a/docs/ai/quickstarts/text-to-image.md b/docs/ai/quickstarts/text-to-image.md index 326891d94041e..89acb7f041ae7 100644 --- a/docs/ai/quickstarts/text-to-image.md +++ b/docs/ai/quickstarts/text-to-image.md @@ -100,6 +100,65 @@ You can customize image generation by providing other options such as size, resp - : The callback that creates the raw representation of the image generation options from an underlying implementation. - : Options are , , and . +## Use hosting integration + +When you build web apps or hosted services, you can integrate image generation using dependency injection and hosting patterns. This approach provides better lifecycle management, configuration integration, and testability. + +### Configure hosting services + +The `Aspire.Azure.AI.OpenAI` package provides extension methods to register Azure OpenAI services with your application's dependency injection container: + +1. Add the necessary packages to your web application: + + ```dotnetcli + dotnet add package Aspire.Azure.AI.OpenAI --prerelease + dotnet add package Azure.AI.OpenAI + dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease + ``` + +1. Configure the Azure OpenAI client and image generator in your `Program.cs` file: + + :::code language="csharp" source="snippets/text-to-image/hosting/Program.cs" id="SnippetSetup"::: + + The method registers the Azure OpenAI client with dependency injection. The connection string (named `"openai"`) is retrieved from configuration, typically from `appsettings.json` or environment variables: + + ```json + { + "ConnectionStrings": { + "openai": "Endpoint=https://your-resource-name.openai.azure.com/;Key=your-api-key" + } + } + ``` + +1. Register the service with dependency injection: + + :::code language="csharp" source="snippets/text-to-image/hosting/Program.cs" id="SnippetAddImageGenerator"::: + + The method registers the image generator as a singleton service that can be injected into controllers, services, or minimal API endpoints. + +1. Add options and logging:: + + :::code language="csharp" source="snippets/text-to-image/hosting/Program.cs" id="SnippetConfigureOptions"::: + + The preceding code: + + - Configures options by calling the extension method on the . This method configures the to be passed to the next generator in the pipeline. + - Adds logging to the image generator pipeline by calling the extension method. + +### Use the image generator in endpoints + +Once registered, you can inject `IImageGenerator` into your endpoints or services: + +:::code language="csharp" source="snippets/text-to-image/hosting/Program.cs" id="SnippetUseImageGenerator"::: + +This hosting approach provides several benefits: + +- **Configuration management**: Connection strings and settings are managed through the .NET configuration system. +- **Dependency injection**: The image generator is available throughout your application via DI. +- **Lifecycle management**: Services are properly initialized and disposed of by the hosting infrastructure. +- **Testability**: Mock implementations can be easily substituted for testing. +- **Integration with .NET Aspire**: When using .NET Aspire, the `AddAzureOpenAIClient` method integrates with service discovery and telemetry. + ## Best practices When implementing text-to-image generation in your applications, consider these best practices: