From 6da1ca2ca13a5ea8f426727a98c8c4a107d11158 Mon Sep 17 00:00:00 2001 From: David Pine Date: Thu, 20 Mar 2025 14:59:51 -0500 Subject: [PATCH 01/25] Add initial bits for #2869. What's new in .NET Aspire 9.2 --- docs/toc.yml | 4 +- docs/whats-new/dotnet-aspire-9.2.md | 58 +++++++++++++++++++++++++++++ docs/whats-new/index.yml | 4 +- docs/whats-new/toc.yml | 2 + 4 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 docs/whats-new/dotnet-aspire-9.2.md diff --git a/docs/toc.yml b/docs/toc.yml index f232fe6767..84da53ea5d 100644 --- a/docs/toc.yml +++ b/docs/toc.yml @@ -24,8 +24,8 @@ items: href: get-started/github-codespaces.md - name: Dev Containers href: get-started/dev-containers.md - - name: What's new in .NET Aspire 9.1 - href: whats-new/dotnet-aspire-9.1.md + - name: What's new in .NET Aspire 9.2 + href: whats-new/dotnet-aspire-9.2.md - name: Upgrade to .NET Aspire 9.0 href: get-started/upgrade-to-aspire-9.md diff --git a/docs/whats-new/dotnet-aspire-9.2.md b/docs/whats-new/dotnet-aspire-9.2.md new file mode 100644 index 0000000000..a87f90d340 --- /dev/null +++ b/docs/whats-new/dotnet-aspire-9.2.md @@ -0,0 +1,58 @@ +--- +title: What's new in .NET Aspire 9.2 +description: Learn what's new in the official general availability release of .NET Aspire 9.2. +ms.date: 03/20/2025 +--- + +# What's new in .NET Aspire 9.2 + +📢 .NET Aspire 9.2 is the next minor version release of .NET Aspire; it supports _both_: + +- .NET 8.0 Long Term Support (LTS) _or_ +- .NET 9.0 Standard Term Support (STS). + +> [!NOTE] +> You're able to use .NET Aspire 9.2 with either .NET 8 or .NET 9! + +As always, we focused on highly requested features and pain points from the community. Our theme for 9.1 was "polish, polish, polish"—so you see quality of life fixes throughout the whole platform. Some highlights from this release are resource relationships in the dashboard, support for working in GitHub Codespaces, and publishing resources as a Dockerfile. + +If you have feedback, questions, or want to contribute to .NET Aspire, collaborate with us on [:::image type="icon" source="../media/github-mark.svg" border="false"::: GitHub](https://github.com/dotnet/aspire) or join us on [:::image type="icon" source="../media/discord-icon.svg" border="false"::: Discord](https://discord.com/invite/h87kDAHQgJ) to chat with team members. + +Whether you're new to .NET Aspire or have been with us since the preview, it's important to note that .NET Aspire releases out-of-band from .NET releases. While major versions of .NET Aspire align with .NET major versions, minor versions are released more frequently. For more details on .NET and .NET Aspire version support, see: + +- [.NET support policy](https://dotnet.microsoft.com/platform/support/policy): Definitions for LTS and STS. +- [.NET Aspire support policy](https://dotnet.microsoft.com/platform/support/policy/aspire): Important unique product life cycle details. + +## ⬆️ Upgrade to .NET Aspire 9.2 + +Moving between minor releases of .NET Aspire is simple: + +1. In your app host project file (that is, _MyApp.AppHost.csproj_), update the [📦 Aspire.AppHost.Sdk](https://www.nuget.org/packages/Aspire.AppHost.Sdk) NuGet package to version `9.2.0`: + + ```xml + + + + + + + + ``` + + For more information, see [.NET Aspire SDK](xref:dotnet/aspire/sdk). + +1. Check for any NuGet package updates, either using the NuGet Package Manager in Visual Studio or the **Update NuGet Package** command in VS Code. +1. Update to the latest [.NET Aspire templates](../fundamentals/aspire-sdk-templates.md) by running the following .NET command line: + + ```dotnetcli + dotnet new update + ``` + + > [!NOTE] + > The `dotnet new update` command updates all of your templates to the latest version. + +If your app host project file doesn't have the `Aspire.AppHost.Sdk` reference, you might still be using .NET Aspire 8. To upgrade to 9.0, you can follow [the documentation from last release](../get-started/upgrade-to-aspire-9.md). + +## TODO + +More stuff... diff --git a/docs/whats-new/index.yml b/docs/whats-new/index.yml index 3073d99e46..e819c541c9 100644 --- a/docs/whats-new/index.yml +++ b/docs/whats-new/index.yml @@ -5,13 +5,15 @@ summary: Welcome to what's new in .NET Aspire docs. Use this page to quickly fin metadata: title: .NET Aspire what's new? description: Learn about new and updated content in .NET Aspire docs. - ms.date: 03/01/2025 + ms.date: 03/20/2025 ms.topic: landing-page landingContent: - title: .NET Aspire release documentation linkLists: - linkListType: whats-new links: + - text: What's new in .NET Aspire 9.2 + url: dotnet-aspire-9.2.md - text: What's new in .NET Aspire 9.1 url: dotnet-aspire-9.1.md - text: What's new in .NET Aspire 9.0 diff --git a/docs/whats-new/toc.yml b/docs/whats-new/toc.yml index 03631e0c4d..72a1729594 100644 --- a/docs/whats-new/toc.yml +++ b/docs/whats-new/toc.yml @@ -7,6 +7,8 @@ items: items: - name: Latest product updates items: + - name: What's new in .NET Aspire 9.2 + href: dotnet-aspire-9.2.md - name: What's new in .NET Aspire 9.1 href: dotnet-aspire-9.1.md - name: What's new in .NET Aspire 9.0 From 89a0809eddb62e6e12ae31750fc353599985019c Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 21 Mar 2025 11:45:07 -0500 Subject: [PATCH 02/25] Add a few more what's new bits --- docs/whats-new/dotnet-aspire-9.2.md | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/whats-new/dotnet-aspire-9.2.md b/docs/whats-new/dotnet-aspire-9.2.md index a87f90d340..fe26aa88e5 100644 --- a/docs/whats-new/dotnet-aspire-9.2.md +++ b/docs/whats-new/dotnet-aspire-9.2.md @@ -53,6 +53,28 @@ Moving between minor releases of .NET Aspire is simple: If your app host project file doesn't have the `Aspire.AppHost.Sdk` reference, you might still be using .NET Aspire 8. To upgrade to 9.0, you can follow [the documentation from last release](../get-started/upgrade-to-aspire-9.md). -## TODO +## 🚧 App host project file changes -More stuff... +The .NET Aspire app host project file no longer requires the `IsAspireHost` property. This property was moved to the `Aspire.AppHost.Sdk` SDK, therefore, you can remove it from your project file. For more information, see [dotnet/aspire issue #8144](https://github.com/dotnet/aspire/pull/8144). + +## 📈 Dashboard usage telemetry + +Starting with .NET Aspire 9.2, we collect usage telemetry from the dashboard by default. This telemetry helps us understand how you use the dashboard and what features are most important to you. We use this information to prioritize our work and improve the dashboard experience. You can opt out of this telemetry by setting the `DOTNET_DASHBOARD_ENABLE_TELEMETRY` environment variable to `false`. For more information, see [.NET Aspire dashboard usage telemetry](../fundamentals/dashboard/usage-telemetry.md). + +## ➕ Adding database resources actually creates a database + +There's [plenty of feedback and confusion](https://github.com/dotnet/aspire/issues/7101) around the `AddDatabase` API. The name implies that it adds a database, but it didn't actually create the database. In .NET Aspire 9.2, the `AddDatabase` API now creates a database for the following hosting integrations: + +| Hosting integration | API reference | +|--|--| +| [📦 Aspire.Hosting.SqlServer](https://www.nuget.org/packages/Aspire.Hosting.SqlServer) | | +| [📦 Aspire.Hosting.PostgreSql](https://www.nuget.org/packages/Aspire.Hosting.PostgreSql) | | + +There are, however; a number of remaining hosting integrations that don't yet create a database: + +- [📦 Aspire.Hosting.Milvus](https://www.nuget.org/packages/Aspire.Hosting.Milvus) +- [📦 Aspire.Hosting.MongoDb](https://www.nuget.org/packages/Aspire.Hosting.MongoDb) +- [📦 Aspire.Hosting.MySql](https://www.nuget.org/packages/Aspire.Hosting.MySql) +- [📦 Aspire.Hosting.Oracle](https://www.nuget.org/packages/Aspire.Hosting.Oracle) + +The Azure SQL and Azure PostgreSQL hosting integrations both expose an `AddDatabase` API, but they don't create a database—unless you call their respective `RunAsContainer` methods. For more information, see [Understand Azure integration APIs](../azure/integrations-overview.md#understand-azure-integration-apis). From dd178bdc226fb34700719924e19aea814b797f72 Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 21 Mar 2025 11:48:58 -0500 Subject: [PATCH 03/25] Add dashboard config --- docs/whats-new/dotnet-aspire-9.2.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/whats-new/dotnet-aspire-9.2.md b/docs/whats-new/dotnet-aspire-9.2.md index fe26aa88e5..0417441799 100644 --- a/docs/whats-new/dotnet-aspire-9.2.md +++ b/docs/whats-new/dotnet-aspire-9.2.md @@ -61,6 +61,12 @@ The .NET Aspire app host project file no longer requires the `IsAspireHost` prop Starting with .NET Aspire 9.2, we collect usage telemetry from the dashboard by default. This telemetry helps us understand how you use the dashboard and what features are most important to you. We use this information to prioritize our work and improve the dashboard experience. You can opt out of this telemetry by setting the `DOTNET_DASHBOARD_ENABLE_TELEMETRY` environment variable to `false`. For more information, see [.NET Aspire dashboard usage telemetry](../fundamentals/dashboard/usage-telemetry.md). +## 🚫 Disable dashboard resource graphs + +The dashboard has the ability to display resource graphs, which show the relationships between resources in your app. This feature is enabled by default, but you can disable it by setting the `Dashboard:UI:DisableResourceGraph` configuration option to `true`. + +For more information, see [.NET Aspire dashboard configuration](../fundamentals/dashboard/configuration.md#other). + ## ➕ Adding database resources actually creates a database There's [plenty of feedback and confusion](https://github.com/dotnet/aspire/issues/7101) around the `AddDatabase` API. The name implies that it adds a database, but it didn't actually create the database. In .NET Aspire 9.2, the `AddDatabase` API now creates a database for the following hosting integrations: From 6169908636f720a36d4cfab921e1c1f69537b1fe Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 21 Mar 2025 12:03:45 -0500 Subject: [PATCH 04/25] Add initial details about HTTP commands --- docs/whats-new/dotnet-aspire-9.2.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/whats-new/dotnet-aspire-9.2.md b/docs/whats-new/dotnet-aspire-9.2.md index 0417441799..7671b7b297 100644 --- a/docs/whats-new/dotnet-aspire-9.2.md +++ b/docs/whats-new/dotnet-aspire-9.2.md @@ -6,13 +6,13 @@ ms.date: 03/20/2025 # What's new in .NET Aspire 9.2 -📢 .NET Aspire 9.2 is the next minor version release of .NET Aspire; it supports _both_: +📢 .NET Aspire 9.2 is the next minor version release of .NET Aspire; it supports: - .NET 8.0 Long Term Support (LTS) _or_ - .NET 9.0 Standard Term Support (STS). > [!NOTE] -> You're able to use .NET Aspire 9.2 with either .NET 8 or .NET 9! +> You're able to use .NET Aspire 9.2 with either .NET 8 or .NET 9! 😲 As always, we focused on highly requested features and pain points from the community. Our theme for 9.1 was "polish, polish, polish"—so you see quality of life fixes throughout the whole platform. Some highlights from this release are resource relationships in the dashboard, support for working in GitHub Codespaces, and publishing resources as a Dockerfile. @@ -48,7 +48,7 @@ Moving between minor releases of .NET Aspire is simple: dotnet new update ``` - > [!NOTE] + > [!IMPORTANT] > The `dotnet new update` command updates all of your templates to the latest version. If your app host project file doesn't have the `Aspire.AppHost.Sdk` reference, you might still be using .NET Aspire 8. To upgrade to 9.0, you can follow [the documentation from last release](../get-started/upgrade-to-aspire-9.md). @@ -84,3 +84,9 @@ There are, however; a number of remaining hosting integrations that don't yet cr - [📦 Aspire.Hosting.Oracle](https://www.nuget.org/packages/Aspire.Hosting.Oracle) The Azure SQL and Azure PostgreSQL hosting integrations both expose an `AddDatabase` API, but they don't create a database—unless you call their respective `RunAsContainer` methods. For more information, see [Understand Azure integration APIs](../azure/integrations-overview.md#understand-azure-integration-apis). + +## 🌐 HTTP-based resource command functionality + +[Custom resource commands](../fundamentals/custom-resource-commands.md) now support HTTP-based functionality with the addition of the `WithHttpCommand` API, enabling you to define endpoints for tasks like database migrations or resets. These commands can be executed directly from the .NET Aspire dashboard. + +For more information, see [Custom HTTP commands in .NET Aspire](../fundamentals/http-commands.md). From 29ff8d813f4d450bc446a6a55034e0f5d0b68590 Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 26 Mar 2025 19:58:27 -0500 Subject: [PATCH 05/25] Apply suggestions from code review Co-authored-by: Andy (Steve) De George <67293991+adegeo@users.noreply.github.com> --- docs/whats-new/dotnet-aspire-9.2.md | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/docs/whats-new/dotnet-aspire-9.2.md b/docs/whats-new/dotnet-aspire-9.2.md index 7671b7b297..08be86fcac 100644 --- a/docs/whats-new/dotnet-aspire-9.2.md +++ b/docs/whats-new/dotnet-aspire-9.2.md @@ -8,11 +8,8 @@ ms.date: 03/20/2025 📢 .NET Aspire 9.2 is the next minor version release of .NET Aspire; it supports: -- .NET 8.0 Long Term Support (LTS) _or_ -- .NET 9.0 Standard Term Support (STS). - -> [!NOTE] -> You're able to use .NET Aspire 9.2 with either .NET 8 or .NET 9! 😲 +- .NET 8.0 Long Term Support (LTS) +- .NET 9.0 Standard Term Support (STS) As always, we focused on highly requested features and pain points from the community. Our theme for 9.1 was "polish, polish, polish"—so you see quality of life fixes throughout the whole platform. Some highlights from this release are resource relationships in the dashboard, support for working in GitHub Codespaces, and publishing resources as a Dockerfile. @@ -51,7 +48,7 @@ Moving between minor releases of .NET Aspire is simple: > [!IMPORTANT] > The `dotnet new update` command updates all of your templates to the latest version. -If your app host project file doesn't have the `Aspire.AppHost.Sdk` reference, you might still be using .NET Aspire 8. To upgrade to 9.0, you can follow [the documentation from last release](../get-started/upgrade-to-aspire-9.md). +If your app host project file doesn't have the `Aspire.AppHost.Sdk` reference, you might still be using .NET Aspire 8. To upgrade to 9.0, follow [the upgrade guide](../get-started/upgrade-to-aspire-9.md). ## 🚧 App host project file changes @@ -59,7 +56,7 @@ The .NET Aspire app host project file no longer requires the `IsAspireHost` prop ## 📈 Dashboard usage telemetry -Starting with .NET Aspire 9.2, we collect usage telemetry from the dashboard by default. This telemetry helps us understand how you use the dashboard and what features are most important to you. We use this information to prioritize our work and improve the dashboard experience. You can opt out of this telemetry by setting the `DOTNET_DASHBOARD_ENABLE_TELEMETRY` environment variable to `false`. For more information, see [.NET Aspire dashboard usage telemetry](../fundamentals/dashboard/usage-telemetry.md). +.NET Aspire collects usage telemetry from the dashboard by default. This telemetry helps us understand how you use the dashboard and what features are most important to you. We use this information to prioritize our work and improve the dashboard experience. You can opt out of this telemetry by setting the `DOTNET_DASHBOARD_ENABLE_TELEMETRY` environment variable to `false`. For more information, see [.NET Aspire dashboard usage telemetry](../fundamentals/dashboard/usage-telemetry.md). ## 🚫 Disable dashboard resource graphs @@ -67,7 +64,7 @@ The dashboard has the ability to display resource graphs, which show the relatio For more information, see [.NET Aspire dashboard configuration](../fundamentals/dashboard/configuration.md#other). -## ➕ Adding database resources actually creates a database +## ➕ Database resources created if missing There's [plenty of feedback and confusion](https://github.com/dotnet/aspire/issues/7101) around the `AddDatabase` API. The name implies that it adds a database, but it didn't actually create the database. In .NET Aspire 9.2, the `AddDatabase` API now creates a database for the following hosting integrations: @@ -76,7 +73,7 @@ There's [plenty of feedback and confusion](https://github.com/dotnet/aspire/issu | [📦 Aspire.Hosting.SqlServer](https://www.nuget.org/packages/Aspire.Hosting.SqlServer) | | | [📦 Aspire.Hosting.PostgreSql](https://www.nuget.org/packages/Aspire.Hosting.PostgreSql) | | -There are, however; a number of remaining hosting integrations that don't yet create a database: +The following hosting integrations don't support database creation: - [📦 Aspire.Hosting.Milvus](https://www.nuget.org/packages/Aspire.Hosting.Milvus) - [📦 Aspire.Hosting.MongoDb](https://www.nuget.org/packages/Aspire.Hosting.MongoDb) @@ -87,6 +84,6 @@ The Azure SQL and Azure PostgreSQL hosting integrations both expose an `AddDatab ## 🌐 HTTP-based resource command functionality -[Custom resource commands](../fundamentals/custom-resource-commands.md) now support HTTP-based functionality with the addition of the `WithHttpCommand` API, enabling you to define endpoints for tasks like database migrations or resets. These commands can be executed directly from the .NET Aspire dashboard. +[Custom resource commands](../fundamentals/custom-resource-commands.md) now support HTTP-based functionality with the addition of the `WithHttpCommand` API, enabling you to define endpoints for tasks like database migrations or resets. These commands can be run directly from the .NET Aspire dashboard. For more information, see [Custom HTTP commands in .NET Aspire](../fundamentals/http-commands.md). From 928027936573ea2a5427249a39d88ed04e0f2821 Mon Sep 17 00:00:00 2001 From: David Pine Date: Thu, 27 Mar 2025 09:25:44 -0500 Subject: [PATCH 06/25] Edit pass --- docs/whats-new/dotnet-aspire-9.2.md | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/docs/whats-new/dotnet-aspire-9.2.md b/docs/whats-new/dotnet-aspire-9.2.md index 08be86fcac..f36771d3a3 100644 --- a/docs/whats-new/dotnet-aspire-9.2.md +++ b/docs/whats-new/dotnet-aspire-9.2.md @@ -1,7 +1,7 @@ --- title: What's new in .NET Aspire 9.2 description: Learn what's new in the official general availability release of .NET Aspire 9.2. -ms.date: 03/20/2025 +ms.date: 03/27/2025 --- # What's new in .NET Aspire 9.2 @@ -11,11 +11,9 @@ ms.date: 03/20/2025 - .NET 8.0 Long Term Support (LTS) - .NET 9.0 Standard Term Support (STS) -As always, we focused on highly requested features and pain points from the community. Our theme for 9.1 was "polish, polish, polish"—so you see quality of life fixes throughout the whole platform. Some highlights from this release are resource relationships in the dashboard, support for working in GitHub Codespaces, and publishing resources as a Dockerfile. - If you have feedback, questions, or want to contribute to .NET Aspire, collaborate with us on [:::image type="icon" source="../media/github-mark.svg" border="false"::: GitHub](https://github.com/dotnet/aspire) or join us on [:::image type="icon" source="../media/discord-icon.svg" border="false"::: Discord](https://discord.com/invite/h87kDAHQgJ) to chat with team members. -Whether you're new to .NET Aspire or have been with us since the preview, it's important to note that .NET Aspire releases out-of-band from .NET releases. While major versions of .NET Aspire align with .NET major versions, minor versions are released more frequently. For more details on .NET and .NET Aspire version support, see: +It's important to note that .NET Aspire releases out-of-band from .NET releases. While major versions of .NET Aspire align with .NET major versions, minor versions are released more frequently. For more information on .NET and .NET Aspire version support, see: - [.NET support policy](https://dotnet.microsoft.com/platform/support/policy): Definitions for LTS and STS. - [.NET Aspire support policy](https://dotnet.microsoft.com/platform/support/policy/aspire): Important unique product life cycle details. @@ -26,16 +24,29 @@ Moving between minor releases of .NET Aspire is simple: 1. In your app host project file (that is, _MyApp.AppHost.csproj_), update the [📦 Aspire.AppHost.Sdk](https://www.nuget.org/packages/Aspire.AppHost.Sdk) NuGet package to version `9.2.0`: - ```xml + ```diff - + + Exe + net9.0 + - true + + + + + + + ``` + > [!IMPORTANT] + > The `IsAspireHost` property is no longer required in the project file. For more information, see [App host project file changes](#-app-host-project-file-changes). + For more information, see [.NET Aspire SDK](xref:dotnet/aspire/sdk). 1. Check for any NuGet package updates, either using the NuGet Package Manager in Visual Studio or the **Update NuGet Package** command in VS Code. @@ -73,6 +84,8 @@ There's [plenty of feedback and confusion](https://github.com/dotnet/aspire/issu | [📦 Aspire.Hosting.SqlServer](https://www.nuget.org/packages/Aspire.Hosting.SqlServer) | | | [📦 Aspire.Hosting.PostgreSql](https://www.nuget.org/packages/Aspire.Hosting.PostgreSql) | | +The Azure SQL and Azure PostgreSQL hosting integrations both expose an `AddDatabase` API, but they don't create a database—unless you call their respective `RunAsContainer` methods. For more information, see [Understand Azure integration APIs](../azure/integrations-overview.md#understand-azure-integration-apis). + The following hosting integrations don't support database creation: - [📦 Aspire.Hosting.Milvus](https://www.nuget.org/packages/Aspire.Hosting.Milvus) @@ -80,8 +93,6 @@ The following hosting integrations don't support database creation: - [📦 Aspire.Hosting.MySql](https://www.nuget.org/packages/Aspire.Hosting.MySql) - [📦 Aspire.Hosting.Oracle](https://www.nuget.org/packages/Aspire.Hosting.Oracle) -The Azure SQL and Azure PostgreSQL hosting integrations both expose an `AddDatabase` API, but they don't create a database—unless you call their respective `RunAsContainer` methods. For more information, see [Understand Azure integration APIs](../azure/integrations-overview.md#understand-azure-integration-apis). - ## 🌐 HTTP-based resource command functionality [Custom resource commands](../fundamentals/custom-resource-commands.md) now support HTTP-based functionality with the addition of the `WithHttpCommand` API, enabling you to define endpoints for tasks like database migrations or resets. These commands can be run directly from the .NET Aspire dashboard. From e2b7e03789a363829bc44f7a56500638296add37 Mon Sep 17 00:00:00 2001 From: David Pine Date: Thu, 27 Mar 2025 09:27:02 -0500 Subject: [PATCH 07/25] Add link to breaking changes --- docs/whats-new/dotnet-aspire-9.2.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/whats-new/dotnet-aspire-9.2.md b/docs/whats-new/dotnet-aspire-9.2.md index f36771d3a3..5fe94ff018 100644 --- a/docs/whats-new/dotnet-aspire-9.2.md +++ b/docs/whats-new/dotnet-aspire-9.2.md @@ -98,3 +98,9 @@ The following hosting integrations don't support database creation: [Custom resource commands](../fundamentals/custom-resource-commands.md) now support HTTP-based functionality with the addition of the `WithHttpCommand` API, enabling you to define endpoints for tasks like database migrations or resets. These commands can be run directly from the .NET Aspire dashboard. For more information, see [Custom HTTP commands in .NET Aspire](../fundamentals/http-commands.md). + +## 💔 Breaking changes + +With every release, we strive to make .NET Aspire better. However, some changes may break existing functionality. The following breaking changes are introduced in .NET Aspire 9.2: + +- [Breaking changes in .NET Aspire 9.2](../compatibility/9.2/index.md) From e303adfff15616ea8659c0050f70c0443aaa3671 Mon Sep 17 00:00:00 2001 From: David Pine Date: Thu, 27 Mar 2025 09:33:55 -0500 Subject: [PATCH 08/25] Removed MS-collected telemetry --- docs/whats-new/dotnet-aspire-9.2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/whats-new/dotnet-aspire-9.2.md b/docs/whats-new/dotnet-aspire-9.2.md index 5fe94ff018..4fb947385f 100644 --- a/docs/whats-new/dotnet-aspire-9.2.md +++ b/docs/whats-new/dotnet-aspire-9.2.md @@ -65,9 +65,11 @@ If your app host project file doesn't have the `Aspire.AppHost.Sdk` reference, y The .NET Aspire app host project file no longer requires the `IsAspireHost` property. This property was moved to the `Aspire.AppHost.Sdk` SDK, therefore, you can remove it from your project file. For more information, see [dotnet/aspire issue #8144](https://github.com/dotnet/aspire/pull/8144). + ## 🚫 Disable dashboard resource graphs From 12f2023bf71790b4d92b890fa4ce04565535208b Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 2 Apr 2025 15:50:55 -0500 Subject: [PATCH 09/25] Try toying with TOC --- docs/whats-new/dotnet-aspire-9.2.md | 2 +- docs/whats-new/toc.yml | 80 ++++++++++++++--------------- 2 files changed, 40 insertions(+), 42 deletions(-) diff --git a/docs/whats-new/dotnet-aspire-9.2.md b/docs/whats-new/dotnet-aspire-9.2.md index 4fb947385f..88d7447473 100644 --- a/docs/whats-new/dotnet-aspire-9.2.md +++ b/docs/whats-new/dotnet-aspire-9.2.md @@ -1,7 +1,7 @@ --- title: What's new in .NET Aspire 9.2 description: Learn what's new in the official general availability release of .NET Aspire 9.2. -ms.date: 03/27/2025 +ms.date: 04/02/2025 --- # What's new in .NET Aspire 9.2 diff --git a/docs/whats-new/toc.yml b/docs/whats-new/toc.yml index 72a1729594..73725a3a82 100644 --- a/docs/whats-new/toc.yml +++ b/docs/whats-new/toc.yml @@ -3,46 +3,44 @@ items: href: ../index.yml - name: What's new href: index.yml +- name: Latest product updates + items: + - name: What's new in .NET Aspire 9.2 + href: dotnet-aspire-9.2.md + - name: What's new in .NET Aspire 9.1 + href: dotnet-aspire-9.1.md + - name: What's new in .NET Aspire 9.0 + href: dotnet-aspire-9.md + - name: Announcing .NET Aspire 8.2 + href: https://devblogs.microsoft.com/dotnet/announcing-dotnet-aspire-8-2/ + - name: What's new in .NET Aspire 8.1 + href: https://devblogs.microsoft.com/dotnet/whats-new-in-aspire-8-1/ + - name: .NET Aspire 8.0 (General Availability) + href: https://devblogs.microsoft.com/dotnet/dotnet-aspire-general-availability/ +- name: Breaking changes + href: ../compatibility/breaking-changes.md +- name: GitHub releases + items: + - name: .NET Aspire 9.1 + href: https://github.com/dotnet/aspire/releases/tag/v9.1.0 + - name: .NET Aspire 9.0 + href: https://github.com/dotnet/aspire/releases/tag/v9.0.0 + - name: .NET Aspire 8.2.1 + href: https://github.com/dotnet/aspire/releases/tag/v8.2.1 + - name: .NET Aspire 8.2.0 + href: https://github.com/dotnet/aspire/releases/tag/v8.2.0 + - name: .NET Aspire 8.1.0 + href: https://github.com/dotnet/aspire/releases/tag/v8.1.0 + - name: .NET Aspire 8.0.2 + href: https://github.com/dotnet/aspire/releases/tag/v8.0.2 + - name: .NET Aspire 8.0.0 + href: https://github.com/dotnet/aspire/releases/tag/v8.0.0 +- name: Latest documentation updates expanded: true items: - - name: Latest product updates - items: - - name: What's new in .NET Aspire 9.2 - href: dotnet-aspire-9.2.md - - name: What's new in .NET Aspire 9.1 - href: dotnet-aspire-9.1.md - - name: What's new in .NET Aspire 9.0 - href: dotnet-aspire-9.md - - name: Announcing .NET Aspire 8.2 - href: https://devblogs.microsoft.com/dotnet/announcing-dotnet-aspire-8-2/ - - name: What's new in .NET Aspire 8.1 - href: https://devblogs.microsoft.com/dotnet/whats-new-in-aspire-8-1/ - - name: .NET Aspire 8.0 (General Availability) - href: https://devblogs.microsoft.com/dotnet/dotnet-aspire-general-availability/ - - name: Breaking changes - href: ../compatibility/breaking-changes.md - - name: GitHub releases - items: - - name: .NET Aspire 9.1 - href: https://github.com/dotnet/aspire/releases/tag/v9.1.0 - - name: .NET Aspire 9.0 - href: https://github.com/dotnet/aspire/releases/tag/v9.0.0 - - name: .NET Aspire 8.2.1 - href: https://github.com/dotnet/aspire/releases/tag/v8.2.1 - - name: .NET Aspire 8.2.0 - href: https://github.com/dotnet/aspire/releases/tag/v8.2.0 - - name: .NET Aspire 8.1.0 - href: https://github.com/dotnet/aspire/releases/tag/v8.1.0 - - name: .NET Aspire 8.0.2 - href: https://github.com/dotnet/aspire/releases/tag/v8.0.2 - - name: .NET Aspire 8.0.0 - href: https://github.com/dotnet/aspire/releases/tag/v8.0.0 - - name: Latest documentation updates - expanded: true - items: - - name: February 2025 - href: dotnet-docs-aspire-mod2.md - - name: January 2025 - href: dotnet-docs-aspire-mod1.md - - name: December 2024 - href: dotnet-docs-aspire-mod0.md + - name: February 2025 + href: dotnet-docs-aspire-mod2.md + - name: January 2025 + href: dotnet-docs-aspire-mod1.md + - name: December 2024 + href: dotnet-docs-aspire-mod0.md From 3726a5deec89493c0354276560b2fa5afd2582a9 Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 2 Apr 2025 15:53:25 -0500 Subject: [PATCH 10/25] Expand product updates --- docs/whats-new/toc.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/whats-new/toc.yml b/docs/whats-new/toc.yml index 73725a3a82..895b814752 100644 --- a/docs/whats-new/toc.yml +++ b/docs/whats-new/toc.yml @@ -4,6 +4,7 @@ items: - name: What's new href: index.yml - name: Latest product updates + expanded: true items: - name: What's new in .NET Aspire 9.2 href: dotnet-aspire-9.2.md From 71b8deeca695473c8a185cce81dfcaf0c2251893 Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 9 Apr 2025 22:35:52 -0500 Subject: [PATCH 11/25] Apply suggestions from code review Co-authored-by: Maddy Montaquila (Leger) --- docs/whats-new/dotnet-aspire-9.2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/whats-new/dotnet-aspire-9.2.md b/docs/whats-new/dotnet-aspire-9.2.md index 88d7447473..b9cb32dc6c 100644 --- a/docs/whats-new/dotnet-aspire-9.2.md +++ b/docs/whats-new/dotnet-aspire-9.2.md @@ -88,7 +88,7 @@ There's [plenty of feedback and confusion](https://github.com/dotnet/aspire/issu The Azure SQL and Azure PostgreSQL hosting integrations both expose an `AddDatabase` API, but they don't create a database—unless you call their respective `RunAsContainer` methods. For more information, see [Understand Azure integration APIs](../azure/integrations-overview.md#understand-azure-integration-apis). -The following hosting integrations don't support database creation: +The following hosting integrations don't yet support database creation: - [📦 Aspire.Hosting.Milvus](https://www.nuget.org/packages/Aspire.Hosting.Milvus) - [📦 Aspire.Hosting.MongoDb](https://www.nuget.org/packages/Aspire.Hosting.MongoDb) From bb12a68fec1002b120c7f5ebe9103a989bc35638 Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 9 Apr 2025 22:34:54 -0500 Subject: [PATCH 12/25] Delete section --- docs/whats-new/dotnet-aspire-9.2.md | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/docs/whats-new/dotnet-aspire-9.2.md b/docs/whats-new/dotnet-aspire-9.2.md index b9cb32dc6c..3c83c58820 100644 --- a/docs/whats-new/dotnet-aspire-9.2.md +++ b/docs/whats-new/dotnet-aspire-9.2.md @@ -1,7 +1,7 @@ --- title: What's new in .NET Aspire 9.2 description: Learn what's new in the official general availability release of .NET Aspire 9.2. -ms.date: 04/02/2025 +ms.date: 04/09/2025 --- # What's new in .NET Aspire 9.2 @@ -45,9 +45,7 @@ Moving between minor releases of .NET Aspire is simple: ``` > [!IMPORTANT] - > The `IsAspireHost` property is no longer required in the project file. For more information, see [App host project file changes](#-app-host-project-file-changes). - - For more information, see [.NET Aspire SDK](xref:dotnet/aspire/sdk). + > The `IsAspireHost` property is no longer required in the project file. To upgrade the project `Sdk` node, you must do so manually, and it's best to restart your IDE as well. For more information, see [.NET Aspire SDK](xref:dotnet/aspire/sdk). 1. Check for any NuGet package updates, either using the NuGet Package Manager in Visual Studio or the **Update NuGet Package** command in VS Code. 1. Update to the latest [.NET Aspire templates](../fundamentals/aspire-sdk-templates.md) by running the following .NET command line: @@ -65,12 +63,6 @@ If your app host project file doesn't have the `Aspire.AppHost.Sdk` reference, y The .NET Aspire app host project file no longer requires the `IsAspireHost` property. This property was moved to the `Aspire.AppHost.Sdk` SDK, therefore, you can remove it from your project file. For more information, see [dotnet/aspire issue #8144](https://github.com/dotnet/aspire/pull/8144). - - ## 🚫 Disable dashboard resource graphs The dashboard has the ability to display resource graphs, which show the relationships between resources in your app. This feature is enabled by default, but you can disable it by setting the `Dashboard:UI:DisableResourceGraph` configuration option to `true`. From 982d5f3bd1ad0ae01ead6a024e3f397e8b904b46 Mon Sep 17 00:00:00 2001 From: David Fowler Date: Thu, 10 Apr 2025 02:57:54 -0700 Subject: [PATCH 13/25] Update .NET Aspire 9.2 documentation --- docs/whats-new/dotnet-aspire-9.2.md | 354 +++++++++++++++++++++++++++- 1 file changed, 342 insertions(+), 12 deletions(-) diff --git a/docs/whats-new/dotnet-aspire-9.2.md b/docs/whats-new/dotnet-aspire-9.2.md index 3c83c58820..ab14d73f40 100644 --- a/docs/whats-new/dotnet-aspire-9.2.md +++ b/docs/whats-new/dotnet-aspire-9.2.md @@ -1,7 +1,7 @@ --- title: What's new in .NET Aspire 9.2 description: Learn what's new in the official general availability release of .NET Aspire 9.2. -ms.date: 04/09/2025 +ms.date: 04/10/2025 --- # What's new in .NET Aspire 9.2 @@ -20,6 +20,9 @@ It's important to note that .NET Aspire releases out-of-band from .NET releases. ## ⬆️ Upgrade to .NET Aspire 9.2 +> [!IMPORTANT] +> If you are using `azd` to deploy Azure PostgreSQL or Azure SQL Server, you now have to configure Azure Managed Identities. For more information, see [breaking changes](#-breaking-changes). + Moving between minor releases of .NET Aspire is simple: 1. In your app host project file (that is, _MyApp.AppHost.csproj_), update the [📦 Aspire.AppHost.Sdk](https://www.nuget.org/packages/Aspire.AppHost.Sdk) NuGet package to version `9.2.0`: @@ -45,7 +48,9 @@ Moving between minor releases of .NET Aspire is simple: ``` > [!IMPORTANT] - > The `IsAspireHost` property is no longer required in the project file. To upgrade the project `Sdk` node, you must do so manually, and it's best to restart your IDE as well. For more information, see [.NET Aspire SDK](xref:dotnet/aspire/sdk). + > The `IsAspireHost` property is no longer required in the project file. For more information, see [App host project file changes](#-app-host-project-file-changes). + + For more information, see [.NET Aspire SDK](xref:dotnet/aspire/sdk). 1. Check for any NuGet package updates, either using the NuGet Package Manager in Visual Studio or the **Update NuGet Package** command in VS Code. 1. Update to the latest [.NET Aspire templates](../fundamentals/aspire-sdk-templates.md) by running the following .NET command line: @@ -59,17 +64,342 @@ Moving between minor releases of .NET Aspire is simple: If your app host project file doesn't have the `Aspire.AppHost.Sdk` reference, you might still be using .NET Aspire 8. To upgrade to 9.0, follow [the upgrade guide](../get-started/upgrade-to-aspire-9.md). -## 🚧 App host project file changes +## 🖇️ Dashboard resource graph & icons + +The dashboard now has the ability to display a resource graph, which shows the relationships between resources in your app in an interactive view. To see the resource graph, select the "Graph" tab above the Resources table. The graph icons also match new icons in the Resources table. + +## App Host + +### 🚧 project file changes The .NET Aspire app host project file no longer requires the `IsAspireHost` property. This property was moved to the `Aspire.AppHost.Sdk` SDK, therefore, you can remove it from your project file. For more information, see [dotnet/aspire issue #8144](https://github.com/dotnet/aspire/pull/8144). -## 🚫 Disable dashboard resource graphs +### Custom Resource URLs + +Resources can now define custom URLs! This makes it easier to build custom experiences for your resources. For example, you can define a custom URL for a database resource that points to the database management console. This makes it easier to access the management console directly from the dashboard, you can even give it a friendly name. + +```C# +var catalogDb = builder.AddPostgres("postgres") + .WithDataVolume() + .WithPgAdmin(resource => + { + resource.WithUrlForEndpoint("http", u => u.DisplayText = "PG Admin"); + }) + .AddDatabase("catalogdb"); +``` + +The above code sets the display text for the `PG Admin` URL to `PG Admin`. This makes it easier to access the management console directly from the dashboard. + +### WithHttpCommand + +Adds WithHttpCommand(), which lets you define a resource command that sends an HTTP request to your app during development. Useful for triggering endpoints like seed or reset from the dashboard. + +```c# +if (builder.Environment.IsDevelopment()) +{ + var resetDbKey = Guid.NewGuid().ToString(); + catalogDbApp.WithEnvironment("DatabaseResetKey", resetDbKey) + .WithHttpCommand("/reset-db", "Reset Database", + commandOptions: new() + { + Description = "Reset the catalog database to its initial state. This will delete and recreate the database.", + ConfirmationMessage = "Are you sure you want to reset the catalog database?", + IconName = "DatabaseLightning", + PrepareRequest = requestContext => + { + requestContext.Request.Headers.Add("Authorization", $"Key {resetDbKey}"); + return Task.CompletedTask; + } + }); +} +``` + +### ConnectionStringResource + +We've introduced a new ConnectionStringResource type that makes it easier to build dynamic connection strings without defining a separate resource +type. This makes it easier to work with build dynamic parameterized connection strings. + + ```c# + var apiKey = builder.AddParameter("apiKey"); + var cs = builder.ApplicationBuilder.AddConnectionString("openai", csb => + { + csb.Append($"Endpoint=https://api.openai.com/v1;AccessKey={apiKey};"); + }); + + var api = builder.AddProject("api") + .WithReference(cs); + ``` + +### Container resources can now specify an ImagePullPolicy + +Container resources can now specify an `ImagePullPolicy` to control when the image is pulled. This is useful for resources that are updated frequently or that have a large image size. The following policies are supported: + +- `Default`: Default behavior (which is the same as missing in 9.2). +- `Always`: Always pull the image. +- `Missing`: Ensures the image is always pulled when the container starts. + +```c# +var cache = builder.AddRedis("cache") + .WithImageTag("latest") + .WithImagePullPolicy(ImagePullPolicy.Always) + .WithRedisInsight(); +``` + +The `ImagePullPolicy` is set to `Always`, which means the image will always be pulled when the resource is created. This is useful for resources that are updated frequently. + +### WithContainerFiles + +Adds `WithContainerFiles`, a way to create files and folders inside a container at runtime by defining them in code. Under the hood, it uses `docker cp` / `podman cp` to copy the files in. Supports setting contents, permissions, and ownership—no bind mounts or temp files needed. + +## Integrations + +### Redis/Valkey/Garnet: Password Support Enabled by Default + +The Redis, Valkey, and Garnet containers enable password authentication by default. This is part of our goal to be secure by default—protecting development environments with sensible defaults while still making them easy to configure. Passwords can be set explicitly or generated automatically if not provided. + +### Automatic Database Creation Support for Postgres and SQL Server + +Postgres and SQL Server resources now support **automatic database creation** when using `AddDatabase`. By default, Aspire will create an empty database if it doesn't exist. You can also optionally provide a custom SQL script to run during creation for advanced setup or seeding. + +Example using Postgres: + +```csharp +var postgres = builder.AddPostgres("pg1"); + +postgres.AddDatabase("todoapp") + .WithCreationScript($$""" + CREATE DATABASE {{databaseName}} + ENCODING = 'UTF8'; + """); +``` + +## Azure + +### AddAzureContainerAppEnvironment + +.NET Aspire 9.2 introduces `AddAzureContainerAppEnvironment`, allowing you to define an Azure Container App environment directly in your app model. This adds an `AzureContainerAppsEnvironmentResource` that lets you configure the environment and its supporting infrastructure (like container registries and volume file shares) using C# and the `Azure.Provisioning` APIs—without relying on `azd` for infrastructure generation. + +**Note:** This uses a different resource naming scheme than `azd`. If you're upgrading an existing deployment, this may create duplicate resources. To avoid this, you can opt into `azd`'s naming convention: + +```c# +builder.AddAzureContainerAppEnvironment("my-env") + .WithAzdResourceNaming(); +``` + +### New Client Integrations: Azure PostgreSQL (Npgsql & EF Core) + +.NET Aspire 9.2 adds client integrations for working with **Azure Database for PostgreSQL**, supporting both local development and secure cloud deployment. + +These integrations automatically use **Managed Identity (Entra ID)** in the cloud and fall back to username/password during local development—no configuration changes required. + +- **`Aspire.Azure.Npgsql`** +- **`Aspire.Azure.Npgsql.EntityFrameworkCore.PostgreSQL`** + +**In AppHost:** + +```csharp +var postgres = builder.AddAzurePostgresFlexibleServer("pg") + .AddDatabase("postgresdb"); + +builder.AddProject() + .WithReference(postgres); +``` + +**In MyService:** + +```csharp +builder.AddAzureNpgsqlDbContext("postgresdb"); +``` + + +### Resource Deep Linking for CosmosDB, EventHub, ServiceBus, and OpenAI + +CosmosDB databases and containers, EventHub hubs, ServiceBus queues/topics, and Azure OpenAI deployments now support **resource deep linking**. This allows connection information to target specific child resources—like a particular **Cosmos container**, **Event Hub**, or **OpenAI deployment**—rather than just the top-level account or namespace. + +Hosting integrations preserve the full resource hierarchy in connection strings, and client integrations can resolve and inject clients scoped to those specific resources. + +**AppHost:** + +```csharp +var cosmos = builder.AddAzureCosmosDB("cosmos") + .RunAsPreviewEmulator(e => e.WithDataExplorer()); + +var db = cosmos.AddCosmosDatabase("appdb"); +var todos = db.AddContainer("todos", partitionKey: "/userId"); +var users = db.AddContainer("users", partitionKey: "/id"); + +builder.AddProject("api") + .WithReference(todos) + .WithReference(users); +``` + +**In the API project:** + +```csharp +builder.AddAzureCosmosDatabase("appdb") + .AddKeyedContainer("todos") + .AddKeyedContainer("users"); + +app.MapPost("/todos", async ([FromKeyedServices("todos")] Container container, TodoItem todo) => +{ + todo.Id = Guid.NewGuid().ToString(); + await container.CreateItemAsync(todo, new PartitionKey(todo.UserId)); + return Results.Created($"/todos/{todo.Id}", todo); +}); +``` + +This makes it easy and convenient to use the SDKs to interact with specific resources directly—without extra wiring or manual configuration. It’s especially useful in apps that deal with multiple containers or Azure services. + +### Improved Managed Identity defaults + +Starting in **.NET Aspire 9.2**, each Azure Container App now gets its **own dedicated managed identity** by default. This is a significant change from previous versions, where all apps shared a single, highly privileged identity. + +This change strengthens Aspire’s *secure by default* posture: + +- Each app only gets access to the Azure resources it needs. +- It enforces the principle of least privilege. +- It provides better isolation between apps in multi-service environments. -The dashboard has the ability to display resource graphs, which show the relationships between resources in your app. This feature is enabled by default, but you can disable it by setting the `Dashboard:UI:DisableResourceGraph` configuration option to `true`. +By assigning identities individually, Aspire can now scope role assignments more precisely—improving security, auditability, and alignment with Azure best practices. -For more information, see [.NET Aspire dashboard configuration](../fundamentals/dashboard/configuration.md#other). +This is a **behavioral breaking change** and may impact apps using: -## ➕ Database resources created if missing +- **Azure SQL Server** - Azure SQL only supports one Azure AD admin. With multiple identities, only the *last deployed app* will be granted admin access by default. Other apps will need explicit users and role assignments. + +- **Azure PostgreSQL** - The app that creates the database becomes the owner. Other apps (like those running migrations or performing data operations) will need explicit `GRANT` permissions to access the database correctly. + +See the [breaking changes](#-breaking-changes) section for more details. + +This new identity model is an important step toward more secure and maintainable applications in Aspire. While it introduces some setup considerations, especially for database integrations, it lays the groundwork for better default security across the board. + +### WithRoleAssignments + +Aspire now supports APIs for modeling **least-privilege role assignments** when deploying to. This enables more secure defaults by allowing you to define exactly which roles each app needs for specific Azure resources. + +```csharp +var storage = builder.AddAzureStorage("storage") + .RunAsEmulator(c => c.WithLifetime(ContainerLifetime.Persistent)); + +var blobs = storage.AddBlobs("blobs"); + +builder.AddProject("api") + .WithExternalHttpEndpoints() + .WithReference(blobs) + .WithRoleAssignments(storage, StorageBuiltInRole.StorageBlobDataContributor); +``` + +In this example, the API project is granted **Storage Blob Data Contributor** only for the referenced storage account. This avoids over-provisioning permissions and helps enforce the principle of least privilege. + +Each container app automatically gets its own **managed identity**, and Aspire now generates the necessary role assignment infrastructure for both default and per-reference roles. When targeting existing Azure resources, role assignments are scoped correctly using separate Bicep resources. + + +### First-Class Key Vault Secret Support + +Aspire now supports `IAzureKeyVaultSecretReference`, a new primitive for modeling secrets directly in the app model. This replaces `BicepSecretOutputReference` and avoids creating a separate Key Vault per resource. + +You can now: + +- Add a shared Key Vault in C# +- Configure services that support keys (e.g., Redis, Cosmos DB) to store their secrets there +- Reference those secrets in your app as environment variables or via the Key Vault config provider + +Use KeyVault directly in your api: + +```c# +var vault = builder.AddAzureKeyVault("kv"); + +var redis = builder.AddAzureRedis("redis") + .WithAccessKeyAuthentication(vault); + +builder.AddProject("api").WithReference(vault); +``` + +Let the compute environment handle the secret management for you: + +```c# +var vault = builder.AddAzureKeyVault("kv"); + +var redis = builder.AddAzureRedis("redis") + .WithAccessKeyAuthentication(vault); + +builder.AddProject("api") + .WithReference(redis); +``` + +**Previous behavior:** +`azd` created and managed secrets using Bicep, with no visibility in the app model. Secrets were handled implicitly and couldn’t be customized in C#. + +**New behavior in 9.2:** +Calling `WithKeyAccessAuthentication` or `WithPasswordAuthentication` now creates an actual `AzureKeyVaultResource` (or accepts a reference to one), and stores connection strings there. Secret names follow the pattern `connectionstrings--{resourcename}` to prevent naming conflicts with other vault entries. + +### Improved Default Permissions for Key Vault References + +When referencing a Key Vault, Aspire previously granted the broad **Key Vault Administrator** role by default. In 9.2, this has been changed to **Key Vault Secrets User**, which provides read-only access to secrets—suitable for most application scenarios. + +This update continues the security-focused improvements in this release. + +## Deployment + +Here’s the updated section with your additions, keeping the tone and structure consistent: + +--- + +### 📦 Built-in Publishers (Preview) + +Aspire 9.2 includes three built-in publishers: + +1. **Docker Compose** – `Aspire.Hosting.Docker` +2. **Kubernetes** – `Aspire.Hosting.Kubernetes` +3. **Azure** – `Aspire.Hosting.Azure` + +The Docker Compose and Kubernetes publishers were contributed by community member and Aspire maintainer [Dave Sekula](https://github.com/dave-sekula)—a great example of the ecosystem shaping Aspire's direction. + +To use a publisher, install the corresponding NuGet package and register it in your AppHost: + +```csharp +builder.AddDockerComposePublisher(); +``` + +📝 Note: Publisher registration methods follow the `Add[Name]Publisher()` convention. + +You can also build your own publisher by implementing the publishing APIs and calling your custom registration method. + +This feature is still **preview** and **experimental**. It’s early days, but it lays a strong foundation for customizable, flexible deployment workflows. +### 🆕 Aspire CLI (Preview) + +.NET Aspire 9.2 introduces the new **`aspire` CLI**, an experimental tool for creating, running, and publishing Aspire applications from the command line. It provides a rich, interactive experience tailored for Aspire users. + +The CLI is available as a .NET tool and can be installed with: + +```bash +dotnet tool install --global aspire.cli --prerelease +``` + +#### Example usage: + +```bash +aspire new +aspire run +aspire add redis +aspire publish --publisher docker-compose +``` + +#### Available commands: + +- `new