From 0840e3c85fc8e64570f2ae86d4358c318f22d64f Mon Sep 17 00:00:00 2001 From: David Pine Date: Thu, 8 Feb 2024 13:48:39 -0600 Subject: [PATCH 01/18] Initial bits --- docs/whats-new/index.yml | 10 +- .../media/preview-3/resource-details-view.png | Bin 0 -> 84870 bytes .../media/preview-3/trace-duration.png | Bin 0 -> 51030 bytes .../preview-3/vs-aspire-sdk-component.png | Bin 0 -> 16574 bytes docs/whats-new/preview-3.md | 399 ++++++++++++++++++ docs/whats-new/toc.yml | 5 + 6 files changed, 412 insertions(+), 2 deletions(-) create mode 100644 docs/whats-new/media/preview-3/resource-details-view.png create mode 100644 docs/whats-new/media/preview-3/trace-duration.png create mode 100644 docs/whats-new/media/preview-3/vs-aspire-sdk-component.png create mode 100644 docs/whats-new/preview-3.md diff --git a/docs/whats-new/index.yml b/docs/whats-new/index.yml index 14725d15a5..269807a441 100644 --- a/docs/whats-new/index.yml +++ b/docs/whats-new/index.yml @@ -5,10 +5,16 @@ summary: Welcome to what's new in .NET Aspire docs. Use this page to quickly fin metadata: title: .NET Aspire documentation what's new? description: Learn about new and updated content in .NET Aspire docs. - ms.date: 02/01/2024 + ms.date: 02/08/2024 ms.topic: landing-page landingContent: -- title: .NET Aspire release updates +- title: .NET Aspire preview documentation + linkLists: + - linkListType: whats-new + links: + - text: .NET Aspire preview 3 + url: preview-3.md +- title: .NET Aspire GitHub release notes linkLists: - linkListType: whats-new links: diff --git a/docs/whats-new/media/preview-3/resource-details-view.png b/docs/whats-new/media/preview-3/resource-details-view.png new file mode 100644 index 0000000000000000000000000000000000000000..be8437b1ae6b59778090df5134ef4aeb375d6be1 GIT binary patch literal 84870 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

*kZ3NJ;OC$lE7L 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 XwwbS$ckXRny^NT!q)^^7t@r;6#%sI> literal 0 HcmV?d00001 diff --git a/docs/whats-new/media/preview-3/trace-duration.png b/docs/whats-new/media/preview-3/trace-duration.png new file mode 100644 index 0000000000000000000000000000000000000000..cb7d929ac972cad4c13cc36ea3d61408444b10f0 GIT binary patch literal 51030 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 aNnqY>51%9G82;w?3y_4ur!q0aum20YxFE3r literal 0 HcmV?d00001 diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md new file mode 100644 index 0000000000..c77e52f08d --- /dev/null +++ b/docs/whats-new/preview-3.md @@ -0,0 +1,399 @@ +--- +--- + +This is the 3rd preview for .NET Aspire. While the goal is to have monthly releases, we skipped January due to the holidays, so we have a bumper release this month. + +.NET Aspire **Preview 3** is now available! Here's a summary of what's new in this preview release: + +## Getting .NET Aspire Preview 3 + +To install or upgrade to .NET Aspire Preview 3, perform the following steps: + +1. If on Windows and using Visual Studio to work with .NET Aspire, install/update to the latest [Visual Studio 2022 Preview](https://aka.ms/vspreview) release (17.10.0 Preview 1.0 at the time of writing) + - Ensure that the ".NET Aspire SDK (Preview)" component is selected under the "Individual components" tab of the Visual Studio installer: + + **Note you must follow the remaining steps in these instructions to update to Preview 3** + ![Visual Studio Installer component selection screen with the ".NET Aspire SDK (Preview)" component highlighted](media/preview-3/VS-aspire-sdk-component.png) +1. If on Windows and you have Visual Studio 2022 17.8.x installed but intend to only use .NET Aspire via the .NET CLI (`dotnet`), download and install the [.NET 8.0.100 SDK using the standalone installer](https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-8.0.100-windows-x64-installer) +1. If on macOS or Linux, download and install the [.NET 8.0.100 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) +1. From a terminal, run the following commands to update the .NET Aspire workload: + + ```dotnetcli + dotnet workload update + dotnet workload install aspire + ``` + + *Note that if you had previous preview versions of the .NET Aspire workload already installed, you may see messages informing you that the workload is already installed. These can be safely ignored.* + +1. Refer to the docs for [detailed instructions on installing .NET Aspire](https://learn.microsoft.com/dotnet/aspire/fundamentals/setup-tooling) + +After updating you can run `dotnet workload list` to see the updated version (note: your version of Visual Studio may differ): + +```text +Installed Workload Id Manifest Version Installation Source +---------------------------------------------------------------------------------------------- + +aspire 8.0.0-preview.3.XXXX.YY/8.0.100 SDK 8.0.100, VS 17.10.XXXX.YY +``` + +### Update existing apps + +For existing .NET Aspire apps, after performing the above steps to get the latest workload, you'll want to change your package references for any Aspire components. Update **all Aspire package references (hosting and components)** to `8.0.0-preview.3.XXXXX.YY`, for example the hosting would change to: + +```xml + +``` + +All other packages being referenced should be updated to the Preview 3 version as well. If using Visual Studio, you can also use NuGet Package Manager and update all packages being used via the IDE (be sure to check the pre-release checkbox in the UI). + +### API changes + +Additionally we made some hosting API changes in Preview 3. + +- In existing code, `builder.WithServiceBinding(...)` should now be changed to `builder.WithEndpoint(...)` to retain the same behavior (there are similar changes for other resource types as well). The `WithServiceBinding` API has been obsoleted, so it will continue to work, but with a compile warning, and will be removed in the next preview. + +## Dashboard updates and refactoring + +We've made a major refactoring of the Aspire Dashboard, splitting it out into its own independent component. The dashboard used to be run as part of the host project, and that caused version conflicts between the dashboard and project dependencies. The dashboard is now its own independent executable, that communicates via gRPC to an endpoint to retrieve information about the projects, containers, their status and logs. + +This refactoring enables the dashboard to be more easily used for real-time runtime diagnostics after deployment, as hosts can implement the same gRPC contract/endpoint for project and dependency status. + +Refactoring should not require any changes to Aspire Projects as there have been no related API changes for the projects themselves. Using the dashboard is unchanged in your development environment. + +### Localization and accessibility + +We've made small changes across the dashboard to support localization and accessibility. Changes include improving color contrast, adding accessibility attributes, and moving UI text into resource files. + +An example of an improvement is how the dashboard indicates trace length. Previously there was a subtle color gradient on each row that didn't meet accessibility requirements. In preview 3 we've replaced the color gradient with a radial progress icon: + +!["Trace details page with new radial icon"](media/preview-3/trace-duration.png) + +### New resource details view + +The resources page grid was bursting at the seams with information. In preview 3 we've introduced a resource details view. The grid continues to display important information, and additional details, including all of a resources properties, are available in the details view. + +!["Resource details view"](media/preview-3/resource-details-view.png) + +### Telemetry improvements + +The dashboard telemetry pages show off a number of improvements: + +- **Metrics filter UI**: The metrics filter UI has been redesigned. It's now much faster to update filters when viewing a metrics chart. +- **Histogram metrics count**: There is a new option to view the count of items recorded to a histogram metric. +- **Span events**: OpenTelemetry spans support events. For example, when was the first data received during a database call. Events are available in span details view. + +## Component Changes + +[Aspire components](https://learn.microsoft.com/dotnet/aspire/fundamentals/components-overview) are a curated suite of NuGet packages specifically selected to facilitate the integration of cloud-native applications with prominent services and platforms. Each component furnishes essential cloud-native functionalities through either automatic provisioning or standardized configuration patterns. .NET Aspire components can be used without an orchestrator project, but they're designed to work best with the .NET Aspire app host. + +### Azure OpenAI component + +This component enables integration of the Azure OpenAI or OpenAI services from an Aspire project. Assuming you already have an OpenAI service provisioned, you can use OpenAI from your projects. + +```csharp +using Azure.AI.OpenAI; + +var builder = WebApplication.CreateBuilder(args); + +// Add service defaults & Aspire components. +builder.AddServiceDefaults(); +builder.AddAzureOpenAI("OpenAI"); + +ar app = builder.Build(); + +app.MapGet("/chat-complete", async (string request, OpenAIClient client) => +{ + var options = new ChatCompletionsOptions("gpt-35-turbo", [new ChatRequestUserMessage(request)]); + var response = await client.GetChatCompletionsAsync(options); + + return response.Value.Choices.FirstOrDefault()?.Message.Content ?? ""; +}); + +app.MapDefaultEndpoints(); + +app.Run(); +``` + +For more details see + +### Component and hosting for Apache Kafka + +Guillaume Delahaye ([@g7eg6e](https://github.com/g7ed6e)) has contributed a library that wraps Confluent.Kafka binaries for producing and consuming messages to an Apache Kafka broker. The Aspire integration enables corresponding health check, logging and metrics. + +```csharp +var builder = WebApplication.CreateBuilder(args); + +// Add service defaults & Aspire components. +builder.AddServiceDefaults(); +builder.AddKafkaProducer("kafka"); + +var app = builder.Build(); + +app.MapGet("/produce/{message}", async (IProducer producer, string message) => +{ + await producer.ProduceAsync( + "my-topic", + new Message() { Key = Guid.NewGuid().ToString(), Value = message }); +}); + +app.MapDefaultEndpoints(); + +app.Run(); +``` + +In addition, `Aspire.Hosting` support for Apache Kafka resources has been added, making it easy to spin up an Apache Kafka container for local development. + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var messaging = builder.AddKafka("kafka"); +``` + +For more details see + +### Component and component for Oracle with EF + +A community contribution from Andre Vieira ([@andrevlins](https://github.com/andrevlins)), this provides integration of the Oracle Entity Framework provider into Aspire, enabling connection pooling, health check, logging and telemetry. + +```csharp +var builder = WebApplication.CreateBuilder(args); + +// Add service defaults & Aspire components. +builder.AddServiceDefaults(); +builder.AddOracleDatabaseDbContext("catalog"); + +var app = builder.Build(); + +app.MapGet("items", async (CatalogDbContext context) => +{ + return await catalogDbContext.CatalogItems +}); + +app.MapDefaultEndpoints(); + +app.Run(); +``` + +In addition, `Aspire.Hosting` support for Oracle resources has been added, making it easier than ever to spin up an Oracle container for local development, or connect to an existing Oracle instance. + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var catalogDb = builder.AddOracleDatabase("oracledatabase") + .AddDatabase("catalog"); +``` + +For more details see + +### Component and hosting for MySql with EF + +Bradley Grainger ([@bgrainger](https://github.com/bgrainger)) has contributed an Aspire component for MySQL named `Aspire.Pomelo.EntityFrameworkCore.MySql`. This wraps the `Pomelo.EntityFrameworkCore.MySql` libray which is an Entity Framework Core provider for MySQL compatible databases. It supports EF Core up to its latest version and uses MySqlConnector for high-performance database server communication. The Aspire integration enables connection pooling, health check, logging and telemetry. + +```csharp +var builder = WebApplication.CreateBuilder(args); + +// Add service defaults & Aspire components. +builder.AddServiceDefaults(); +builder.AddMySqlDbContext("catalog"); + +var app = builder.Build(); + +app.MapGet("items", async (CatalogDbContext context) => +{ + return await catalogDbContext.CatalogItems +}); + +app.MapDefaultEndpoints(); + +app.Run(); +``` + +You can use the existing `Aspire.Hosting` support for MySQL resources to spin up a MySQL container for local development, or connect to an existing MySQL instance. + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var catalogDb = builder.AddMySqlContainer("mysql") + // Mount the SQL scripts directory into the container so that the init scripts run. + .WithVolumeMount("../DatabaseContainers.ApiService/data/mysql", "/docker-entrypoint-initdb.d", VolumeMountType.Bind) + .AddDatabase("catalog"); +``` + +For more details see + +### Hosting support for CosmosDB + +As part of preview 3 we worked with the Azure Developer CLI team to introduce support for provisioning Cosmos DB resources. To use Cosmos DB in your App Host you can do the following: + +``` csharp +var builder = DistributedApplication.CreateBuilder(args); +var db = builder.AddAzureCosmosDB("cosmos").UseEmulator().AddDatabase("db"); +var app = builder.AddProject +{ + settings.IgnoreEmulatorCertificate = true; +}); + +``` + +Note: the `UseEmulator()` call `IgnoreEmulatorCertificate` property in the code samples above. This means that when this Aspire application is run we will launch the Cosmos emulator for you and automatically configure the Cosmos client to use the emulator. + +We are currently working with the Cosmos team to remove the need to set IgnoreEmulatorCertificate so this customization for settings may not be required in the future. + +When deployed, azd will automatically provision the Cosmos DB resource and create the database as defined in the Aspire application model. + +### StackExchange.Redis now has logging + +We've updated the Aspire component to use the new feature in StackExchange.Redis which supports `Microsoft.Extensions.Logging.ILogger`. Redis logs will now be shown in both the console and structured logs in the dashboard. + +## AppModel Changes + +### WithServiceBinding has changed to WithEndpoint + +The `WithServiceBinding` API was a little unclear as to what it actually did. The API has been deprecated and replaced with `WithEndpoint`. Additional variants for `WithHttpEndpoint` and `WithHttpsEndpoint` that are parameterized for those connection types have been added. + +``` csharp +// This will launch the Grafana container image and bind it to a random +// port (visible in the Dashboard). +var builder = DistributedApplication.CreateBuilder(args); +var container = builder.AddContainer("grafana", "grafana/grafana") + .WithHttpEndpoint(3000); +builder.Build().Run(); +``` + +### WithEntrypoint is now supported for containers + +Using `WithEntrypoint` enables the Entrypoint to be specified for container based resources. + +### RedisCommander Resource Extension + +[Redis commander](https://github.com/joeferner/redis-commander) is a web management tool for viewing the contents of the Redis Cache. With this change you can use the +`WithRedisCommander` extension to both IResourceBuilder and IResourceBuilder which results in a container resource being added to the model (once) and a lifecycle hook which configures it for Redis Commander. + +Once added, when run a pre-configured Redis Commander instance is spun up to interactively browse what is in the Redis Cache. It can be accessed via the Aspire Dashboard. For example: + +``` csharp +var builder = DistributedApplication.CreateBuilder(args); +builder.AddRedis("myredis1").WithRedisCommander(); +builder.AddRedis("myredis2").WithRedisCommander(); +``` + +### PostgreSQL PgAdmin Resource Extension + +Andre Vieira has also contributed a resource extension to make it easier to deploy the [pgAdmin](https://www.pgadmin.org/) container to manage your PostgreSQL database instances. Similar to the RedisCommander functionality above, this makes it easy to automatically deploy a pgadmin container when running an Aspire project. + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var catalogDb = builder.AddPostgresContainer("postgres") + .WithPgAdmin() + .AddDatabase("catalogdb"); +``` + +### Model Dapr sidecar as an Aspire resource + +Previously Dapr sidecars were modeled as annotations on a parent resource, which indicated the need for a Dapr sidecar started for that resource. The App Model has been extended so that the Dapr sidecar is a _true_ resource, but one exposed _only_ through the existing AddDaprSidecar() API to avoid semantic errors; users cannot create an arbitrary Dapr sidecar resource, only configure the one associated with a given resource. The API allows the existing sidecar options (if any) to be specified, as well as use the existing resource annotation helpers, such as `WithEnvironment()`. + +``` csharp +builder.AddProject("servicea") + .WithDaprSidecar( + sidecarBuilder => + { + sidecarBuilder + .WithOptions(new DaprSidecarOptions { ... }) + .WithEnvironment("DAPR_TEST_VAR", "Dapr Test Value"); + } + ) +``` + +### Add support for Dapr --runtime-path option + +This change enables running Aspire applications with an arbitrary version of the Dapr runtime, such as when you want to test against a locally-built version of Dapr. + +``` csharp +builder.AddProject("serviceb") + .WithDaprSidecar( new DaprSidecarOptions + { + AppId = "serviceb", + RuntimePath = "/some/other/runtime/folder" + }); +``` + +## Add support of Orleans in Aspire + +[Orleans](https://learn.microsoft.com/dotnet/orleans/overview) is a framework for building robust scalable distributed applications, using the "Actor Model" to seamlessly scaling grains across the available nodes. This preview supports Orleans backed by Azure tables for membership and Azure table and blobs for grain storage. Support for other storage will be added later. + +Use in the server and client are easy with: + +``` csharp +// server +builder.AddAspireOrleansServer(); + +// client +builder.AddAspireOrleansClient(); +``` + +In the AppHost project, Orleans is initialized with: + +``` csharp +var storage = builder.AddAzureStorage("storage"); +var clusteringTable = storage.AddTables("clustering"); +var grainStorage = storage.AddBlobs("grainstate"); + +var orleans = builder.AddOrleans("my-app") + .WithClustering(clusteringTable) + .WithGrainStorage("Default", grainStorage); + +// Add a server project (also called "silo") +builder.AddProject("silo") + .WithOrleansServer(orleans); + +// Add a project with a reference to the Orleans client +builder.AddProject("frontend") + .WithOrleansClient(orleans); +``` + +## Samples + +The Aspire samples are located in , not the main Aspire repo. New samples for Preview 3 include: + +- [AspireWithJavaScript](https://github.com/dotnet/aspire-samples/tree/main/samples/AspireWithJavaScript) demonstrates an approach for integrating several Node.js apps into a .NET Aspire application. +- [ClientAppsIntegration](https://github.com/dotnet/aspire-samples/tree/main/samples/ClientAppsIntegration) demonstrates working with client apps such as WinForms, WPF, etc., in a .NET Aspire app, such that the client app is launched along with the AppHost project, can resolve services via service discovery, and logs, traces, and metrics via OpenTelemetry to the dashboard. +- [Persistent Volume Mount](https://github.com/dotnet/aspire-samples/tree/main/samples/VolumeMount) demonstrates how to configure a SQL Server container to use a persistent volume mount in .NET Aspire, so that the data is persisted across app launches. This method can be used to persist data across instances of other container types configured in .NET Aspire apps too, e.g. PostgreSQL, Redis, etc. + +## Deployment to Azure using AZD + +The [Azure Developer CLI (azd)](https://learn.microsoft.com/azure/developer/azure-developer-cli/) is an open-source tool that makes it easier to get your applications running in the cloud on Azure. We are working to ensure that `azd` enables the fastest and simplest way to get an Aspire app provisioned and deployed to Azure in minutes. In this release we are still primarily targeting Azure Container Apps. + +In this release, we added a few new features to better support Aspire deployments: + +- CosmosDB - see [section above](#hosting-support-for-cosmosdb) +- AzureSQL + +```csharp +var azSqlServer = builder.AddAzureSqlServer("azsql").AddDatabase("azsqldb"); +``` + +## Other + +### Add templates for AppHost & ServiceDefaults projects + +For those wishing to add Aspire functionality to an existing solution, we now have project templates for the AppHost and ServiceDefault projects. These are the same as what is included in the empty Aspire application template. They can be added through Visual Studio _Add New Project_ or via the command line using: + +``` console +dotnet new aspire-apphost +dotnet new aspire-servicedefaults +``` + +## What's next? + +We plan to release a new Aspire preview every month as we work towards a stable 8.0 release during the second quarter of 2024. Check back on the .NET blog for details of future releases or get involved over on the [Aspire project on GitHub](https://github.com/dotnet/aspire). Official samples are available in the [dotnet/aspire-samples repo](https://github.com/dotnet/aspire-samples). + +## Summary + +Thanks again for your response to .NET Aspire. We're having a lot of fun working hard to make building distributed applications with .NET a great experience and would love for you to [try out Preview 3](#getting-net-aspire-preview-3) and let us know what you think. diff --git a/docs/whats-new/toc.yml b/docs/whats-new/toc.yml index f625c2de64..6433dfcc33 100644 --- a/docs/whats-new/toc.yml +++ b/docs/whats-new/toc.yml @@ -3,6 +3,11 @@ items: href: index.yml expanded: true items: + - name: Latest product updates + expanded: true + items: + - name: .NET Aspire preview 3 + href: preview-3.md - name: Latest documentation updates expanded: true items: From e3c9f60adb3ac309998acc21fa8713d9b2c7052e Mon Sep 17 00:00:00 2001 From: David Pine Date: Thu, 8 Feb 2024 14:57:19 -0600 Subject: [PATCH 02/18] More cleanup --- docs/whats-new/preview-3.md | 162 ++++++++++++++++++++---------------- 1 file changed, 88 insertions(+), 74 deletions(-) diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md index c77e52f08d..8c1fbf601e 100644 --- a/docs/whats-new/preview-3.md +++ b/docs/whats-new/preview-3.md @@ -1,18 +1,21 @@ --- +title: .NET Aspire preview 3 +description: .NET Aspire preview 3 is now available and includes many improvements and new capabilities +ms.date: 02/08/2024 --- -This is the 3rd preview for .NET Aspire. While the goal is to have monthly releases, we skipped January due to the holidays, so we have a bumper release this month. +# .NET Aspire preview 3 -.NET Aspire **Preview 3** is now available! Here's a summary of what's new in this preview release: +.NET Aspire **preview 3** is now available! This is the 3rd preview for .NET Aspire. While the goal is to have monthly releases, we skipped January due to the holidays, so we have a bumper release this month. -## Getting .NET Aspire Preview 3 +## Getting .NET Aspire preview 3 -To install or upgrade to .NET Aspire Preview 3, perform the following steps: +To install or upgrade to .NET Aspire preview 3, perform the following steps: 1. If on Windows and using Visual Studio to work with .NET Aspire, install/update to the latest [Visual Studio 2022 Preview](https://aka.ms/vspreview) release (17.10.0 Preview 1.0 at the time of writing) - Ensure that the ".NET Aspire SDK (Preview)" component is selected under the "Individual components" tab of the Visual Studio installer: - **Note you must follow the remaining steps in these instructions to update to Preview 3** + **Note you must follow the remaining steps in these instructions to update to preview 3** ![Visual Studio Installer component selection screen with the ".NET Aspire SDK (Preview)" component highlighted](media/preview-3/VS-aspire-sdk-component.png) 1. If on Windows and you have Visual Studio 2022 17.8.x installed but intend to only use .NET Aspire via the .NET CLI (`dotnet`), download and install the [.NET 8.0.100 SDK using the standalone installer](https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-8.0.100-windows-x64-installer) 1. If on macOS or Linux, download and install the [.NET 8.0.100 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) @@ -25,15 +28,14 @@ To install or upgrade to .NET Aspire Preview 3, perform the following steps: *Note that if you had previous preview versions of the .NET Aspire workload already installed, you may see messages informing you that the workload is already installed. These can be safely ignored.* -1. Refer to the docs for [detailed instructions on installing .NET Aspire](https://learn.microsoft.com/dotnet/aspire/fundamentals/setup-tooling) +1. Refer to the docs for [detailed instructions on installing .NET Aspire](../fundamentals/setup-tooling.md) After updating you can run `dotnet workload list` to see the updated version (note: your version of Visual Studio may differ): ```text -Installed Workload Id Manifest Version Installation Source ----------------------------------------------------------------------------------------------- - -aspire 8.0.0-preview.3.XXXX.YY/8.0.100 SDK 8.0.100, VS 17.10.XXXX.YY +Installed Workload Id Manifest Version Installation Source +----------------------------------------------------------------------------------------- +aspire 8.0.0-preview.3.XXXX.YY/8.0.100 SDK 8.0.100, VS 17.10.XXXX.YY ``` ### Update existing apps @@ -44,11 +46,11 @@ For existing .NET Aspire apps, after performing the above steps to get the lates ``` -All other packages being referenced should be updated to the Preview 3 version as well. If using Visual Studio, you can also use NuGet Package Manager and update all packages being used via the IDE (be sure to check the pre-release checkbox in the UI). +All other packages being referenced should be updated to the preview 3 version as well. If using Visual Studio, you can also use NuGet Package Manager and update all packages being used via the IDE (be sure to check the pre-release checkbox in the UI). ### API changes -Additionally we made some hosting API changes in Preview 3. +Additionally we made some hosting API changes in preview 3. - In existing code, `builder.WithServiceBinding(...)` should now be changed to `builder.WithEndpoint(...)` to retain the same behavior (there are similar changes for other resource types as well). The `WithServiceBinding` API has been obsoleted, so it will continue to work, but with a compile warning, and will be removed in the next preview. @@ -66,13 +68,13 @@ We've made small changes across the dashboard to support localization and access An example of an improvement is how the dashboard indicates trace length. Previously there was a subtle color gradient on each row that didn't meet accessibility requirements. In preview 3 we've replaced the color gradient with a radial progress icon: -!["Trace details page with new radial icon"](media/preview-3/trace-duration.png) +:::image type="content" source="media/preview-3/trace-duration.png" lightbox="media/preview-3/trace-duration.png" alt-text="Trace details page with new radial icon."::: ### New resource details view The resources page grid was bursting at the seams with information. In preview 3 we've introduced a resource details view. The grid continues to display important information, and additional details, including all of a resources properties, are available in the details view. -!["Resource details view"](media/preview-3/resource-details-view.png) +:::image type="content" source="media/preview-3/resource-details-view.png" lightbox="media/preview-3/resource-details-view.png" alt-text="Resource details view."::: ### Telemetry improvements @@ -82,7 +84,7 @@ The dashboard telemetry pages show off a number of improvements: - **Histogram metrics count**: There is a new option to view the count of items recorded to a histogram metric. - **Span events**: OpenTelemetry spans support events. For example, when was the first data received during a database call. Events are available in span details view. -## Component Changes +## Component updatea [Aspire components](https://learn.microsoft.com/dotnet/aspire/fundamentals/components-overview) are a curated suite of NuGet packages specifically selected to facilitate the integration of cloud-native applications with prominent services and platforms. Each component furnishes essential cloud-native functionalities through either automatic provisioning or standardized configuration patterns. .NET Aspire components can be used without an orchestrator project, but they're designed to work best with the .NET Aspire app host. @@ -101,12 +103,15 @@ builder.AddAzureOpenAI("OpenAI"); ar app = builder.Build(); -app.MapGet("/chat-complete", async (string request, OpenAIClient client) => +app.MapGet("/chat-complete", static async (string request, OpenAIClient client) => { - var options = new ChatCompletionsOptions("gpt-35-turbo", [new ChatRequestUserMessage(request)]); + var options = new ChatCompletionsOptions( + "gpt-35-turbo", [new ChatRequestUserMessage(request)]); + var response = await client.GetChatCompletionsAsync(options); - return response.Value.Choices.FirstOrDefault()?.Message.Content ?? ""; + return response.Value.Choices.FirstOrDefault()?.Message.Content + ?? "no response..."; }); app.MapDefaultEndpoints(); @@ -114,11 +119,11 @@ app.MapDefaultEndpoints(); app.Run(); ``` -For more details see +For more information, see [GitHub: .NET Aspire.Azure.AI.OpenAI](https://github.com/dotnet/aspire/tree/main/src/Components/Aspire.Azure.AI.OpenAI). ### Component and hosting for Apache Kafka -Guillaume Delahaye ([@g7eg6e](https://github.com/g7ed6e)) has contributed a library that wraps Confluent.Kafka binaries for producing and consuming messages to an Apache Kafka broker. The Aspire integration enables corresponding health check, logging and metrics. +Guillaume Delahaye ([@g7eg6e](https://github.com/g7ed6e)) has contributed a library that wraps `Confluent.Kafka` binaries for producing and consuming messages to an Apache Kafka broker. The Aspire integration enables corresponding health check, logging and metrics. ```csharp var builder = WebApplication.CreateBuilder(args); @@ -129,11 +134,16 @@ builder.AddKafkaProducer("kafka"); var app = builder.Build(); -app.MapGet("/produce/{message}", async (IProducer producer, string message) => +app.MapGet("/produce/{message}", static async ( + IProducer producer, string message) => { await producer.ProduceAsync( "my-topic", - new Message() { Key = Guid.NewGuid().ToString(), Value = message }); + new Message() + { + Key = Guid.NewGuid().ToString(), + Value = message + }); }); app.MapDefaultEndpoints(); @@ -149,7 +159,7 @@ var builder = DistributedApplication.CreateBuilder(args); var messaging = builder.AddKafka("kafka"); ``` -For more details see +For more information, see [GitHub: .NET Aspire.Confluent.Kafka](https://github.com/dotnet/aspire/tree/main/src/Components/Aspire.Confluent.Kafka). ### Component and component for Oracle with EF @@ -164,9 +174,9 @@ builder.AddOracleDatabaseDbContext("catalog"); var app = builder.Build(); -app.MapGet("items", async (CatalogDbContext context) => +app.MapGet("items", static async (CatalogDbContext context) => { - return await catalogDbContext.CatalogItems + return await catalogDbContext.CatalogItems; }); app.MapDefaultEndpoints(); @@ -183,7 +193,7 @@ var catalogDb = builder.AddOracleDatabase("oracledatabase") .AddDatabase("catalog"); ``` -For more details see +For more information, see [GitHub: .NET Aspire.Oracle.EntityFrameworkCore](https://github.com/dotnet/aspire/tree/main/src/Components/Aspire.Oracle.EntityFrameworkCore). ### Component and hosting for MySql with EF @@ -198,9 +208,9 @@ builder.AddMySqlDbContext("catalog"); var app = builder.Build(); -app.MapGet("items", async (CatalogDbContext context) => +app.MapGet("items", static async (CatalogDbContext context) => { - return await catalogDbContext.CatalogItems + return await catalogDbContext.CatalogItems; }); app.MapDefaultEndpoints(); @@ -215,17 +225,20 @@ var builder = DistributedApplication.CreateBuilder(args); var catalogDb = builder.AddMySqlContainer("mysql") // Mount the SQL scripts directory into the container so that the init scripts run. - .WithVolumeMount("../DatabaseContainers.ApiService/data/mysql", "/docker-entrypoint-initdb.d", VolumeMountType.Bind) + .WithVolumeMount( + source: "../DatabaseContainers.ApiService/data/mysql", + target: "/docker-entrypoint-initdb.d", + type: VolumeMountType.Bind) .AddDatabase("catalog"); ``` -For more details see +For more information, see [GitHub: .NET Aspire.Pomelo.EntityFrameworkCore.MySql](https://github.com/dotnet/aspire/tree/main/src/Components/Aspire.Pomelo.EntityFrameworkCore.MySql). ### Hosting support for CosmosDB As part of preview 3 we worked with the Azure Developer CLI team to introduce support for provisioning Cosmos DB resources. To use Cosmos DB in your App Host you can do the following: -``` csharp +```csharp var builder = DistributedApplication.CreateBuilder(args); var db = builder.AddAzureCosmosDB("cosmos").UseEmulator().AddDatabase("db"); var app = builder.AddProject +```csharp +builder.AddAzureCosmosDB("db", static settings => { settings.IgnoreEmulatorCertificate = true; }); - ``` Note: the `UseEmulator()` call `IgnoreEmulatorCertificate` property in the code samples above. This means that when this Aspire application is run we will launch the Cosmos emulator for you and automatically configure the Cosmos client to use the emulator. @@ -249,41 +261,44 @@ When deployed, azd will automatically provision the Cosmos DB resource and creat ### StackExchange.Redis now has logging -We've updated the Aspire component to use the new feature in StackExchange.Redis which supports `Microsoft.Extensions.Logging.ILogger`. Redis logs will now be shown in both the console and structured logs in the dashboard. +We've updated the Aspire component to use the new feature in StackExchange.Redis which supports . Redis logs will now be shown in both the console and structured logs in the dashboard. ## AppModel Changes -### WithServiceBinding has changed to WithEndpoint +### `WithServiceBinding` has changed to `WithEndpoint` The `WithServiceBinding` API was a little unclear as to what it actually did. The API has been deprecated and replaced with `WithEndpoint`. Additional variants for `WithHttpEndpoint` and `WithHttpsEndpoint` that are parameterized for those connection types have been added. -``` csharp +```csharp // This will launch the Grafana container image and bind it to a random // port (visible in the Dashboard). -var builder = DistributedApplication.CreateBuilder(args); +var builder = DistributedApplication.CreateBuilder(args); + var container = builder.AddContainer("grafana", "grafana/grafana") .WithHttpEndpoint(3000); + builder.Build().Run(); ``` -### WithEntrypoint is now supported for containers +### `WithEntrypoint` is now supported for containers -Using `WithEntrypoint` enables the Entrypoint to be specified for container based resources. +Using `WithEntrypoint` enables the entrypoint to be specified for container based resources. -### RedisCommander Resource Extension +### RedisCommander resource extension -[Redis commander](https://github.com/joeferner/redis-commander) is a web management tool for viewing the contents of the Redis Cache. With this change you can use the -`WithRedisCommander` extension to both IResourceBuilder and IResourceBuilder which results in a container resource being added to the model (once) and a lifecycle hook which configures it for Redis Commander. +[Redis commander](https://github.com/joeferner/redis-commander) is a web management tool for viewing the contents of the Redis Cache. With this change you can use the `WithRedisCommander` extension to both IResourceBuilder and IResourceBuilder which results in a container resource being added to the model (once) and a lifecycle hook which configures it for Redis Commander. Once added, when run a pre-configured Redis Commander instance is spun up to interactively browse what is in the Redis Cache. It can be accessed via the Aspire Dashboard. For example: -``` csharp +```csharp var builder = DistributedApplication.CreateBuilder(args); + builder.AddRedis("myredis1").WithRedisCommander(); + builder.AddRedis("myredis2").WithRedisCommander(); ``` -### PostgreSQL PgAdmin Resource Extension +### PostgreSQL PgAdmin resource extension Andre Vieira has also contributed a resource extension to make it easier to deploy the [pgAdmin](https://www.pgadmin.org/) container to manage your PostgreSQL database instances. Similar to the RedisCommander functionality above, this makes it easy to automatically deploy a pgadmin container when running an Aspire project. @@ -291,56 +306,57 @@ Andre Vieira has also contributed a resource extension to make it easier to depl var builder = DistributedApplication.CreateBuilder(args); var catalogDb = builder.AddPostgresContainer("postgres") - .WithPgAdmin() - .AddDatabase("catalogdb"); + .WithPgAdmin() + .AddDatabase("catalogdb"); ``` ### Model Dapr sidecar as an Aspire resource Previously Dapr sidecars were modeled as annotations on a parent resource, which indicated the need for a Dapr sidecar started for that resource. The App Model has been extended so that the Dapr sidecar is a _true_ resource, but one exposed _only_ through the existing AddDaprSidecar() API to avoid semantic errors; users cannot create an arbitrary Dapr sidecar resource, only configure the one associated with a given resource. The API allows the existing sidecar options (if any) to be specified, as well as use the existing resource annotation helpers, such as `WithEnvironment()`. -``` csharp +```csharp builder.AddProject("servicea") .WithDaprSidecar( - sidecarBuilder => - { - sidecarBuilder - .WithOptions(new DaprSidecarOptions { ... }) - .WithEnvironment("DAPR_TEST_VAR", "Dapr Test Value"); - } - ) + static sidecarBuilder => + { + sidecarBuilder.WithOptions(new DaprSidecarOptions + { + // ... + }) + .WithEnvironment("DAPR_TEST_VAR", "Dapr Test Value"); + }); ``` -### Add support for Dapr --runtime-path option +### Add support for Dapr `--runtime-path` option This change enables running Aspire applications with an arbitrary version of the Dapr runtime, such as when you want to test against a locally-built version of Dapr. -``` csharp +```csharp builder.AddProject("serviceb") - .WithDaprSidecar( new DaprSidecarOptions - { - AppId = "serviceb", - RuntimePath = "/some/other/runtime/folder" - }); + .WithDaprSidecar(new DaprSidecarOptions + { + AppId = "serviceb", + RuntimePath = "/some/other/runtime/folder" + }); ``` ## Add support of Orleans in Aspire -[Orleans](https://learn.microsoft.com/dotnet/orleans/overview) is a framework for building robust scalable distributed applications, using the "Actor Model" to seamlessly scaling grains across the available nodes. This preview supports Orleans backed by Azure tables for membership and Azure table and blobs for grain storage. Support for other storage will be added later. +[Orleans](/dotnet/orleans/overview) is a framework for building robust scalable distributed applications, using the "Actor Model" to seamlessly scaling grains across the available nodes. This preview supports Orleans backed by Azure tables for membership and Azure table and blobs for grain storage. Support for other storage will be added later. Use in the server and client are easy with: -``` csharp -// server +```csharp +// server builder.AddAspireOrleansServer(); // client builder.AddAspireOrleansClient(); ``` -In the AppHost project, Orleans is initialized with: +In the app host project, Orleans is initialized with: -``` csharp +```csharp var storage = builder.AddAzureStorage("storage"); var clusteringTable = storage.AddTables("clustering"); var grainStorage = storage.AddBlobs("grainstate"); @@ -360,15 +376,15 @@ builder.AddProject("frontend") ## Samples -The Aspire samples are located in , not the main Aspire repo. New samples for Preview 3 include: +The Aspire samples are located in , not the main Aspire repo. New samples for preview 3 include: -- [AspireWithJavaScript](https://github.com/dotnet/aspire-samples/tree/main/samples/AspireWithJavaScript) demonstrates an approach for integrating several Node.js apps into a .NET Aspire application. +- [AspireWithJavaScript](https://github.com/dotnet/aspire-samples/tree/main/samples/AspireWithJavaScript) demonstrates an approach for integrating several Node.js apps into a .NET Aspire application, including Angular, React, and Vue. - [ClientAppsIntegration](https://github.com/dotnet/aspire-samples/tree/main/samples/ClientAppsIntegration) demonstrates working with client apps such as WinForms, WPF, etc., in a .NET Aspire app, such that the client app is launched along with the AppHost project, can resolve services via service discovery, and logs, traces, and metrics via OpenTelemetry to the dashboard. - [Persistent Volume Mount](https://github.com/dotnet/aspire-samples/tree/main/samples/VolumeMount) demonstrates how to configure a SQL Server container to use a persistent volume mount in .NET Aspire, so that the data is persisted across app launches. This method can be used to persist data across instances of other container types configured in .NET Aspire apps too, e.g. PostgreSQL, Redis, etc. ## Deployment to Azure using AZD -The [Azure Developer CLI (azd)](https://learn.microsoft.com/azure/developer/azure-developer-cli/) is an open-source tool that makes it easier to get your applications running in the cloud on Azure. We are working to ensure that `azd` enables the fastest and simplest way to get an Aspire app provisioned and deployed to Azure in minutes. In this release we are still primarily targeting Azure Container Apps. +The [Azure Developer CLI (azd)][/azure/developer/azure-developer-cli/) is an open-source tool that makes it easier to get your applications running in the cloud on Azure. We are working to ensure that `azd` enables the fastest and simplest way to get an Aspire app provisioned and deployed to Azure in minutes. In this release we are still primarily targeting Azure Container Apps. In this release, we added a few new features to better support Aspire deployments: @@ -379,9 +395,7 @@ In this release, we added a few new features to better support Aspire deployment var azSqlServer = builder.AddAzureSqlServer("azsql").AddDatabase("azsqldb"); ``` -## Other - -### Add templates for AppHost & ServiceDefaults projects +## Add templates for AppHost and ServiceDefaults projects For those wishing to add Aspire functionality to an existing solution, we now have project templates for the AppHost and ServiceDefault projects. These are the same as what is included in the empty Aspire application template. They can be added through Visual Studio _Add New Project_ or via the command line using: @@ -396,4 +410,4 @@ We plan to release a new Aspire preview every month as we work towards a stable ## Summary -Thanks again for your response to .NET Aspire. We're having a lot of fun working hard to make building distributed applications with .NET a great experience and would love for you to [try out Preview 3](#getting-net-aspire-preview-3) and let us know what you think. +Thanks again for your response to .NET Aspire. We're having a lot of fun working hard to make building distributed applications with .NET a great experience and would love for you to try out preview 3 and let us know what you think. From edbfbe3bd89c01927160d61040889d1746b4c882 Mon Sep 17 00:00:00 2001 From: David Pine Date: Thu, 8 Feb 2024 19:13:28 -0600 Subject: [PATCH 03/18] Apply suggestions from code review Co-authored-by: Jose Perez Rodriguez --- docs/whats-new/preview-3.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md index 8c1fbf601e..93c4183f5f 100644 --- a/docs/whats-new/preview-3.md +++ b/docs/whats-new/preview-3.md @@ -35,15 +35,15 @@ After updating you can run `dotnet workload list` to see the updated version (no ```text Installed Workload Id Manifest Version Installation Source ----------------------------------------------------------------------------------------- -aspire 8.0.0-preview.3.XXXX.YY/8.0.100 SDK 8.0.100, VS 17.10.XXXX.YY +aspire 8.0.0-preview.3.24105.21/8.0.100 SDK 8.0.100, VS 17.10.XXXX.YY ``` ### Update existing apps -For existing .NET Aspire apps, after performing the above steps to get the latest workload, you'll want to change your package references for any Aspire components. Update **all Aspire package references (hosting and components)** to `8.0.0-preview.3.XXXXX.YY`, for example the hosting would change to: +For existing .NET Aspire apps, after performing the above steps to get the latest workload, you'll want to change your package references for any Aspire components. Update **all Aspire package references (hosting and components)** to `8.0.0-preview.3.24105.21`, for example the hosting would change to: ```xml - + ``` All other packages being referenced should be updated to the preview 3 version as well. If using Visual Studio, you can also use NuGet Package Manager and update all packages being used via the IDE (be sure to check the pre-release checkbox in the UI). @@ -286,7 +286,7 @@ Using `WithEntrypoint` enables the entrypoint to be specified for container base ### RedisCommander resource extension -[Redis commander](https://github.com/joeferner/redis-commander) is a web management tool for viewing the contents of the Redis Cache. With this change you can use the `WithRedisCommander` extension to both IResourceBuilder and IResourceBuilder which results in a container resource being added to the model (once) and a lifecycle hook which configures it for Redis Commander. +[Redis commander](https://github.com/joeferner/redis-commander) is a web management tool for viewing the contents of the Redis Cache. With this change you can use the `WithRedisCommander` extension to both `IResourceBuilder` and `IResourceBuilder` which results in a container resource being added to the model (once) and a lifecycle hook which configures it for Redis Commander. Once added, when run a pre-configured Redis Commander instance is spun up to interactively browse what is in the Redis Cache. It can be accessed via the Aspire Dashboard. For example: From fac5da88423aedf04691032f93029a7290b041e7 Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 9 Feb 2024 08:44:59 -0600 Subject: [PATCH 04/18] More fixes and cleanup --- docs/whats-new/preview-3.md | 50 +++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md index 93c4183f5f..5e207c16fb 100644 --- a/docs/whats-new/preview-3.md +++ b/docs/whats-new/preview-3.md @@ -1,24 +1,32 @@ --- title: .NET Aspire preview 3 description: .NET Aspire preview 3 is now available and includes many improvements and new capabilities -ms.date: 02/08/2024 +ms.date: 02/09/2024 --- # .NET Aspire preview 3 -.NET Aspire **preview 3** is now available! This is the 3rd preview for .NET Aspire. While the goal is to have monthly releases, we skipped January due to the holidays, so we have a bumper release this month. +Today we're announcing the 3rd preview of .NET Aspire. While the goal is to have monthly releases, we skipped January due to the holidays. .NET Aspire **preview 3** is now available! -## Getting .NET Aspire preview 3 +## Get .NET Aspire preview 3 To install or upgrade to .NET Aspire preview 3, perform the following steps: -1. If on Windows and using Visual Studio to work with .NET Aspire, install/update to the latest [Visual Studio 2022 Preview](https://aka.ms/vspreview) release (17.10.0 Preview 1.0 at the time of writing) - - Ensure that the ".NET Aspire SDK (Preview)" component is selected under the "Individual components" tab of the Visual Studio installer: +# [Visual Studio (Preview)](#tab/visual-studio-preview) - **Note you must follow the remaining steps in these instructions to update to preview 3** - ![Visual Studio Installer component selection screen with the ".NET Aspire SDK (Preview)" component highlighted](media/preview-3/VS-aspire-sdk-component.png) -1. If on Windows and you have Visual Studio 2022 17.8.x installed but intend to only use .NET Aspire via the .NET CLI (`dotnet`), download and install the [.NET 8.0.100 SDK using the standalone installer](https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-8.0.100-windows-x64-installer) -1. If on macOS or Linux, download and install the [.NET 8.0.100 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) +Install/update to the latest [Visual Studio 2022 Preview](https://aka.ms/vspreview) release (17.10.0 Preview 1.0 at the time of writing). Ensure that the **.NET Aspire SDK (Preview)** component is selected under the **Individual components** tab of the Visual Studio installer. + +:::image type="content" source="media/preview-3/vs-aspire-sdk-component.png" lightbox="media/preview-3/vs-aspire-sdk-component.png" alt-text="Visual Studio Installer component selection screen with the ".NET Aspire SDK (Preview)" component highlighted"::: + +**Note you must follow the remaining steps in these instructions to update to preview 3** + +# [Visual Studio](#tab/visual-studio) + +If you intend to only use .NET Aspire via the .NET CLI (`dotnet`), download and install the [.NET 8.0.100 SDK using the standalone installer](https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-8.0.100-windows-x64-installer) + +# [.NET CLI](#tab/dotnet-cli) + +1. Download and install the [.NET 8.0.100 SDK](https://dotnet.microsoft.com/download/dotnet/8.0). 1. From a terminal, run the following commands to update the .NET Aspire workload: ```dotnetcli @@ -26,9 +34,12 @@ To install or upgrade to .NET Aspire preview 3, perform the following steps: dotnet workload install aspire ``` - *Note that if you had previous preview versions of the .NET Aspire workload already installed, you may see messages informing you that the workload is already installed. These can be safely ignored.* + > [!IMPORTANT] + > If you've previous preview versions of the .NET Aspire workload already installed, you may see messages informing you that the workload is already installed. These can be safely ignored. + +--- -1. Refer to the docs for [detailed instructions on installing .NET Aspire](../fundamentals/setup-tooling.md) +Refer to the docs for [detailed instructions on installing .NET Aspire](../fundamentals/setup-tooling.md) After updating you can run `dotnet workload list` to see the updated version (note: your version of Visual Studio may differ): @@ -84,7 +95,7 @@ The dashboard telemetry pages show off a number of improvements: - **Histogram metrics count**: There is a new option to view the count of items recorded to a histogram metric. - **Span events**: OpenTelemetry spans support events. For example, when was the first data received during a database call. Events are available in span details view. -## Component updatea +## Component updates [Aspire components](https://learn.microsoft.com/dotnet/aspire/fundamentals/components-overview) are a curated suite of NuGet packages specifically selected to facilitate the integration of cloud-native applications with prominent services and platforms. Each component furnishes essential cloud-native functionalities through either automatic provisioning or standardized configuration patterns. .NET Aspire components can be used without an orchestrator project, but they're designed to work best with the .NET Aspire app host. @@ -190,14 +201,14 @@ In addition, `Aspire.Hosting` support for Oracle resources has been added, makin var builder = DistributedApplication.CreateBuilder(args); var catalogDb = builder.AddOracleDatabase("oracledatabase") - .AddDatabase("catalog"); + .AddDatabase("catalog"); ``` For more information, see [GitHub: .NET Aspire.Oracle.EntityFrameworkCore](https://github.com/dotnet/aspire/tree/main/src/Components/Aspire.Oracle.EntityFrameworkCore). ### Component and hosting for MySql with EF -Bradley Grainger ([@bgrainger](https://github.com/bgrainger)) has contributed an Aspire component for MySQL named `Aspire.Pomelo.EntityFrameworkCore.MySql`. This wraps the `Pomelo.EntityFrameworkCore.MySql` libray which is an Entity Framework Core provider for MySQL compatible databases. It supports EF Core up to its latest version and uses MySqlConnector for high-performance database server communication. The Aspire integration enables connection pooling, health check, logging and telemetry. +Bradley Grainger ([@bgrainger](https://github.com/bgrainger)) has contributed an Aspire component for MySQL named `Aspire.Pomelo.EntityFrameworkCore.MySql`. This wraps the `Pomelo.EntityFrameworkCore.MySql` library which is an Entity Framework Core provider for MySQL compatible databases. It supports EF Core up to its latest version and uses MySqlConnector for high-performance database server communication. The Aspire integration enables connection pooling, health check, logging and telemetry. ```csharp var builder = WebApplication.CreateBuilder(args); @@ -224,7 +235,8 @@ You can use the existing `Aspire.Hosting` support for MySQL resources to spin up var builder = DistributedApplication.CreateBuilder(args); var catalogDb = builder.AddMySqlContainer("mysql") - // Mount the SQL scripts directory into the container so that the init scripts run. + // Mount the SQL scripts directory into the + // container so that the init scripts run. .WithVolumeMount( source: "../DatabaseContainers.ApiService/data/mysql", target: "/docker-entrypoint-initdb.d", @@ -259,11 +271,11 @@ We are currently working with the Cosmos team to remove the need to set IgnoreEm When deployed, azd will automatically provision the Cosmos DB resource and create the database as defined in the Aspire application model. -### StackExchange.Redis now has logging +### `StackExchange.Redis` now has logging -We've updated the Aspire component to use the new feature in StackExchange.Redis which supports . Redis logs will now be shown in both the console and structured logs in the dashboard. +We've updated the Aspire component to use the new feature in `StackExchange.Redis` which supports . Redis logs will now be shown in both the console and structured logs in the dashboard. -## AppModel Changes +## API changes ### `WithServiceBinding` has changed to `WithEndpoint` @@ -399,7 +411,7 @@ var azSqlServer = builder.AddAzureSqlServer("azsql").AddDatabase("azsqldb"); For those wishing to add Aspire functionality to an existing solution, we now have project templates for the AppHost and ServiceDefault projects. These are the same as what is included in the empty Aspire application template. They can be added through Visual Studio _Add New Project_ or via the command line using: -``` console +```console dotnet new aspire-apphost dotnet new aspire-servicedefaults ``` From caeea10c95cfe4bbe2b561e4ac7b7f0aaac3d4d0 Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 9 Feb 2024 12:58:13 -0600 Subject: [PATCH 05/18] Lots of updates and fixes --- docs/fundamentals/setup-tooling.md | 10 ++++- docs/whats-new/preview-3.md | 64 +++++++++--------------------- 2 files changed, 27 insertions(+), 47 deletions(-) diff --git a/docs/fundamentals/setup-tooling.md b/docs/fundamentals/setup-tooling.md index 7e2185bed9..1899835ebd 100644 --- a/docs/fundamentals/setup-tooling.md +++ b/docs/fundamentals/setup-tooling.md @@ -1,7 +1,7 @@ --- title: .NET Aspire tooling description: Learn about essential tooling concepts for .NET Aspire. -ms.date: 12/08/2023 +ms.date: 02/09/2024 --- # .NET Aspire setup and tooling @@ -30,6 +30,14 @@ The .NET Aspire workload installs internal dependencies and makes available othe # [Visual Studio](#tab/visual-studio) +Starting with Visual Studio 2022 17.10 Preview 1 includes the **.NET Aspire preview 3** workload by default. To verify that you have the .NET Aspire workload installed, run the following command: + +```dotnetcli +dotnet workload list +``` + +If you have an earlier version of Visual Studio 2022 Preview, you can either upgrade to Visual Studio 2022 17.10 Preview 1 or you can install the .NET Aspire workload using the following steps: + To install the .NET Aspire workload in Visual Studio 2022 Preview, use the Visual Studio installer. 1. Open the Visual Studio Installer. diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md index 5e207c16fb..73adbe7233 100644 --- a/docs/whats-new/preview-3.md +++ b/docs/whats-new/preview-3.md @@ -10,54 +10,25 @@ Today we're announcing the 3rd preview of .NET Aspire. While the goal is to have ## Get .NET Aspire preview 3 -To install or upgrade to .NET Aspire preview 3, perform the following steps: - -# [Visual Studio (Preview)](#tab/visual-studio-preview) - -Install/update to the latest [Visual Studio 2022 Preview](https://aka.ms/vspreview) release (17.10.0 Preview 1.0 at the time of writing). Ensure that the **.NET Aspire SDK (Preview)** component is selected under the **Individual components** tab of the Visual Studio installer. - -:::image type="content" source="media/preview-3/vs-aspire-sdk-component.png" lightbox="media/preview-3/vs-aspire-sdk-component.png" alt-text="Visual Studio Installer component selection screen with the ".NET Aspire SDK (Preview)" component highlighted"::: - -**Note you must follow the remaining steps in these instructions to update to preview 3** - -# [Visual Studio](#tab/visual-studio) - -If you intend to only use .NET Aspire via the .NET CLI (`dotnet`), download and install the [.NET 8.0.100 SDK using the standalone installer](https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-8.0.100-windows-x64-installer) - -# [.NET CLI](#tab/dotnet-cli) - -1. Download and install the [.NET 8.0.100 SDK](https://dotnet.microsoft.com/download/dotnet/8.0). -1. From a terminal, run the following commands to update the .NET Aspire workload: - - ```dotnetcli - dotnet workload update - dotnet workload install aspire - ``` - - > [!IMPORTANT] - > If you've previous preview versions of the .NET Aspire workload already installed, you may see messages informing you that the workload is already installed. These can be safely ignored. - ---- - -Refer to the docs for [detailed instructions on installing .NET Aspire](../fundamentals/setup-tooling.md) - -After updating you can run `dotnet workload list` to see the updated version (note: your version of Visual Studio may differ): +The [.NET Aspire setup and tooling](../fundamentals/setup-tooling.md) instructions have been updated to reflect preview 3. After updating you can run `dotnet workload list` to see the updated version (note: your version of Visual Studio may differ): ```text -Installed Workload Id Manifest Version Installation Source ------------------------------------------------------------------------------------------ +Installed Workload Id Manifest Version Installation Source +------------------------------------------------------------------------------------------ aspire 8.0.0-preview.3.24105.21/8.0.100 SDK 8.0.100, VS 17.10.XXXX.YY ``` ### Update existing apps -For existing .NET Aspire apps, after performing the above steps to get the latest workload, you'll want to change your package references for any Aspire components. Update **all Aspire package references (hosting and components)** to `8.0.0-preview.3.24105.21`, for example the hosting would change to: +For existing .NET Aspire apps, after installing the latest workload, you'll want to update your package references for all .NET Aspire components. All Aspire NuGet packages should be updated to: + +- `8.0.0-preview.3.24105.21` ```xml - + ``` -All other packages being referenced should be updated to the preview 3 version as well. If using Visual Studio, you can also use NuGet Package Manager and update all packages being used via the IDE (be sure to check the pre-release checkbox in the UI). +If you're using Visual Studio, you can use the NuGet Package Manager and update all packages being used via the IDE (be sure to check the pre-release checkbox in the UI). ### API changes @@ -97,11 +68,11 @@ The dashboard telemetry pages show off a number of improvements: ## Component updates -[Aspire components](https://learn.microsoft.com/dotnet/aspire/fundamentals/components-overview) are a curated suite of NuGet packages specifically selected to facilitate the integration of cloud-native applications with prominent services and platforms. Each component furnishes essential cloud-native functionalities through either automatic provisioning or standardized configuration patterns. .NET Aspire components can be used without an orchestrator project, but they're designed to work best with the .NET Aspire app host. +[Aspire components](../fundamentals/components-overview.md) are a curated suite of NuGet packages specifically selected to facilitate the integration of cloud-native applications with prominent services and platforms. Each component furnishes essential cloud-native functionalities through either automatic provisioning or standardized configuration patterns. .NET Aspire components can be used without an orchestrator project, but they're designed to work best with the .NET Aspire app host. -### Azure OpenAI component +### Azure AI OpenAI component -This component enables integration of the Azure OpenAI or OpenAI services from an Aspire project. Assuming you already have an OpenAI service provisioned, you can use OpenAI from your projects. +This component enables integration of the Azure AI OpenAI or OpenAI services from an Aspire project. Assuming you already have an OpenAI service provisioned, you can use OpenAI from your projects. ```csharp using Azure.AI.OpenAI; @@ -407,19 +378,20 @@ In this release, we added a few new features to better support Aspire deployment var azSqlServer = builder.AddAzureSqlServer("azsql").AddDatabase("azsqldb"); ``` -## Add templates for AppHost and ServiceDefaults projects +## Add templates for _AppHost_ and _ServiceDefaults_ projects -For those wishing to add Aspire functionality to an existing solution, we now have project templates for the AppHost and ServiceDefault projects. These are the same as what is included in the empty Aspire application template. They can be added through Visual Studio _Add New Project_ or via the command line using: +For those wishing to add .NET Aspire functionality to an existing solution, you can use the new templates for the _AppHost_ and _ServiceDefault_ projects. These are the same projects included in the empty .NET Aspire application template. They can be added through Visual Studio _Add New Project_ or via the command line using: ```console dotnet new aspire-apphost dotnet new aspire-servicedefaults ``` -## What's next? - -We plan to release a new Aspire preview every month as we work towards a stable 8.0 release during the second quarter of 2024. Check back on the .NET blog for details of future releases or get involved over on the [Aspire project on GitHub](https://github.com/dotnet/aspire). Official samples are available in the [dotnet/aspire-samples repo](https://github.com/dotnet/aspire-samples). +For more information on adding .NET Aspire to existing solutions, see [Tutorial: Add .NET Aspire to an existing .NET 8 microservices app](../get-started/add-aspire-existing-app.md). ## Summary -Thanks again for your response to .NET Aspire. We're having a lot of fun working hard to make building distributed applications with .NET a great experience and would love for you to try out preview 3 and let us know what you think. +A new .NET Aspire preview release is planned every month leading up to a stable release anticipated in the second quarter of 2024. + +- To get involved checkout the [.NET Aspire project on GitHub](https://github.com/dotnet/aspire). +- Follow along with the official samples in the [dotnet/aspire-samples repo](https://github.com/dotnet/aspire-samples). From 57f867f4148ef6a3bc74902633b35ee2aff4d228 Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 9 Feb 2024 13:17:16 -0600 Subject: [PATCH 06/18] Tweak hub text, and minor edit pass --- docs/breadcrumb/toc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/breadcrumb/toc.yml b/docs/breadcrumb/toc.yml index 98c7ebde7e..7137c5e0c5 100644 --- a/docs/breadcrumb/toc.yml +++ b/docs/breadcrumb/toc.yml @@ -11,7 +11,7 @@ items: tocHref: /dotnet/aspire/ topicHref: /dotnet/aspire/index items: - - name: What's new in .NET Aspire docs + - name: What's new in .NET Aspire tocHref: /dotnet/aspire/whats-new/ topicHref: ../whats-new/index.yml - name: API browser From e413eedd99bac6b3a9e4ec09f18756bfaa8746c8 Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 9 Feb 2024 15:38:59 -0600 Subject: [PATCH 07/18] Fix word soup --- docs/whats-new/preview-3.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md index 73adbe7233..4bbe2637c5 100644 --- a/docs/whats-new/preview-3.md +++ b/docs/whats-new/preview-3.md @@ -219,15 +219,19 @@ For more information, see [GitHub: .NET Aspire.Pomelo.EntityFrameworkCore.MySql] ### Hosting support for CosmosDB -As part of preview 3 we worked with the Azure Developer CLI team to introduce support for provisioning Cosmos DB resources. To use Cosmos DB in your App Host you can do the following: +As part of preview 3 support for provisioning Cosmos DB resources was introduced. To use Cosmos DB in your app host you can do the following: ```csharp var builder = DistributedApplication.CreateBuilder(args); -var db = builder.AddAzureCosmosDB("cosmos").UseEmulator().AddDatabase("db"); + +var db = builder.AddAzureCosmosDB("cosmos") + .UseEmulator() + .AddDatabase("db"); + var app = builder.AddProject @@ -236,11 +240,9 @@ builder.AddAzureCosmosDB("db", static settings => }); ``` -Note: the `UseEmulator()` call `IgnoreEmulatorCertificate` property in the code samples above. This means that when this Aspire application is run we will launch the Cosmos emulator for you and automatically configure the Cosmos client to use the emulator. - -We are currently working with the Cosmos team to remove the need to set IgnoreEmulatorCertificate so this customization for settings may not be required in the future. +When using the Cosmos DB emulator, you can ignore the certificate validation by setting the `IgnoreEmulatorCertificate` property to `true`. We are currently working with the Cosmos team to remove the need to set `IgnoreEmulatorCertificate` so this customization for settings may not be required in the future. -When deployed, azd will automatically provision the Cosmos DB resource and create the database as defined in the Aspire application model. +When deployed, `azd` will automatically provision the Cosmos DB resource and create the database as defined in the .NET Aspire application model. ### `StackExchange.Redis` now has logging @@ -295,7 +297,7 @@ var catalogDb = builder.AddPostgresContainer("postgres") ### Model Dapr sidecar as an Aspire resource -Previously Dapr sidecars were modeled as annotations on a parent resource, which indicated the need for a Dapr sidecar started for that resource. The App Model has been extended so that the Dapr sidecar is a _true_ resource, but one exposed _only_ through the existing AddDaprSidecar() API to avoid semantic errors; users cannot create an arbitrary Dapr sidecar resource, only configure the one associated with a given resource. The API allows the existing sidecar options (if any) to be specified, as well as use the existing resource annotation helpers, such as `WithEnvironment()`. +Previously Dapr sidecars were modeled as annotations on a parent resource, which indicated the need for a Dapr sidecar started for that resource. The App Model has been extended so that the Dapr sidecar is a _true_ resource, but one exposed _only_ through the existing `AddDaprSidecar` API to avoid semantic errors; users cannot create an arbitrary Dapr sidecar resource, only configure the one associated with a given resource. The API allows the existing sidecar options (if any) to be specified, as well as use the existing resource annotation helpers, such as . ```csharp builder.AddProject("servicea") @@ -323,7 +325,7 @@ builder.AddProject("serviceb") }); ``` -## Add support of Orleans in Aspire +## Add support of Orleans in .NET Aspire [Orleans](/dotnet/orleans/overview) is a framework for building robust scalable distributed applications, using the "Actor Model" to seamlessly scaling grains across the available nodes. This preview supports Orleans backed by Azure tables for membership and Azure table and blobs for grain storage. Support for other storage will be added later. @@ -357,9 +359,9 @@ builder.AddProject("frontend") .WithOrleansClient(orleans); ``` -## Samples +## New .NET Aspire samples -The Aspire samples are located in , not the main Aspire repo. New samples for preview 3 include: +The .NET Aspire samples are located in , not the main Aspire repo. New samples for preview 3 include: - [AspireWithJavaScript](https://github.com/dotnet/aspire-samples/tree/main/samples/AspireWithJavaScript) demonstrates an approach for integrating several Node.js apps into a .NET Aspire application, including Angular, React, and Vue. - [ClientAppsIntegration](https://github.com/dotnet/aspire-samples/tree/main/samples/ClientAppsIntegration) demonstrates working with client apps such as WinForms, WPF, etc., in a .NET Aspire app, such that the client app is launched along with the AppHost project, can resolve services via service discovery, and logs, traces, and metrics via OpenTelemetry to the dashboard. From b1b8bb9bd3155be5df481e9e775c32808ef33ebf Mon Sep 17 00:00:00 2001 From: ReubenBond Date: Sat, 10 Feb 2024 20:13:29 -0800 Subject: [PATCH 08/18] Updates to Orleans section --- docs/whats-new/preview-3.md | 44 +++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md index 4bbe2637c5..54729bffb8 100644 --- a/docs/whats-new/preview-3.md +++ b/docs/whats-new/preview-3.md @@ -325,38 +325,48 @@ builder.AddProject("serviceb") }); ``` -## Add support of Orleans in .NET Aspire +## Add support for Orleans in .NET Aspire -[Orleans](/dotnet/orleans/overview) is a framework for building robust scalable distributed applications, using the "Actor Model" to seamlessly scaling grains across the available nodes. This preview supports Orleans backed by Azure tables for membership and Azure table and blobs for grain storage. Support for other storage will be added later. +This preview adds support for [Orleans](/dotnet/orleans/overview), allowing you to configure a cluster in your app host, specifying the resources the cluster uses. For example, you can specify that an Azure Table will be used for cluster membership, an Azure Redis resource will be used for the grain directory, and an Azure Blob Storage resource will be used to store grain state. The integration currently support Redis and Azure Table & Blob storage resources. Support for other resources will be added later. -Use in the server and client are easy with: - -```csharp -// server -builder.AddAspireOrleansServer(); - -// client -builder.AddAspireOrleansClient(); -``` - -In the app host project, Orleans is initialized with: +In the app host project, an Orleans cluster can be declared using the `AddOrleans` method, and then configured with clustering, grain storage, grain directory, and other providers using methods on the returned builder: ```csharp var storage = builder.AddAzureStorage("storage"); var clusteringTable = storage.AddTables("clustering"); -var grainStorage = storage.AddBlobs("grainstate"); +var defaultStorage = storage.AddBlobs("grainstate"); +var cartStorage = builder.AddRedis("redis-cart"); var orleans = builder.AddOrleans("my-app") .WithClustering(clusteringTable) - .WithGrainStorage("Default", grainStorage); + .WithGrainStorage("Default", grainStorage) + .WithGrainStorage("cart", cartStorage); // Add a server project (also called "silo") builder.AddProject("silo") - .WithOrleansServer(orleans); + .WithReference(orleans); // Add a project with a reference to the Orleans client builder.AddProject("frontend") - .WithOrleansClient(orleans); + .WithReference(orleans); +``` + +In the client and server projects, add Orleans to the host builder as usual. + +```csharp +// For an Orleans server: +builder.UseOrleans(); + +// Or, for an Orleans client: +builder.UseOrleansClient(); +``` + +Orleans will read configuration created by your Aspire app host project and configure the providers specified therein. To allow Orleans to access the configured resources, add them as keyed services using the corresponding Aspire component: + +```csharp +builder.AddKeyedAzureTableService("clustering"); +builder.AddKeyedAzureBlobService("grainstate"); +builder.AddKeyedRedis("redis-cart"); ``` ## New .NET Aspire samples From ceab45decee9a1515ef1784f837deb807e4cb649 Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 12 Feb 2024 08:08:01 -0600 Subject: [PATCH 09/18] Address issue #366 --- docs/fundamentals/setup-tooling.md | 3 +++ docs/whats-new/preview-3.md | 8 +++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/fundamentals/setup-tooling.md b/docs/fundamentals/setup-tooling.md index 1899835ebd..44cbe60d55 100644 --- a/docs/fundamentals/setup-tooling.md +++ b/docs/fundamentals/setup-tooling.md @@ -85,6 +85,9 @@ dotnet workload list ## .NET Aspire project templates +> [!NOTE] +> The .NET 9.0 SDK causes issues with the .NET Aspire workloads ability to display templates, and create projects from the templates. If you're using .NET 9.0, know that your ability to create new .NET Aspire apps is currently limited. For more information, see [.NET Aspire preview-3 cannot create app when .NET 9 is installed](https://github.com/dotnet/aspire/issues/1951) and [.NET Aspire preview-3 installed with Visual Studio 17.10 doesn't show templates](https://github.com/dotnet/aspire/issues/2186). + The .NET Aspire workload makes available .NET Aspire project templates. These project templates allow you to create new apps pre-configured with the .NET Aspire project structure and default settings. These projects also provide a unified debugging experience across the different resources of your app. There are currently two project templates available: diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md index 54729bffb8..58cf276a45 100644 --- a/docs/whats-new/preview-3.md +++ b/docs/whats-new/preview-3.md @@ -12,10 +12,12 @@ Today we're announcing the 3rd preview of .NET Aspire. While the goal is to have The [.NET Aspire setup and tooling](../fundamentals/setup-tooling.md) instructions have been updated to reflect preview 3. After updating you can run `dotnet workload list` to see the updated version (note: your version of Visual Studio may differ): -```text +```dotnetcli +dotnet workload list + Installed Workload Id Manifest Version Installation Source ------------------------------------------------------------------------------------------- -aspire 8.0.0-preview.3.24105.21/8.0.100 SDK 8.0.100, VS 17.10.XXXX.YY +-------------------------------------------------------------------------------- +aspire 8.0.0-preview.3.24105.21/8.0.100 VS 17.10.34608.216 ``` ### Update existing apps From 2fd4d206d01eacc2086aea027d4d2ab627a9f288 Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 12 Feb 2024 10:41:37 -0600 Subject: [PATCH 10/18] check point updates --- .../AspireSample.ServiceDefaults.csproj | 6 +- docs/whats-new/index.yml | 4 +- .../media/preview-3/trace-duration.png | Bin 51030 -> 51513 bytes docs/whats-new/preview-3.md | 75 ++++++++++++------ 4 files changed, 55 insertions(+), 30 deletions(-) diff --git a/docs/get-started/snippets/quickstart/AspireSample/AspireSample.ServiceDefaults/AspireSample.ServiceDefaults.csproj b/docs/get-started/snippets/quickstart/AspireSample/AspireSample.ServiceDefaults/AspireSample.ServiceDefaults.csproj index fbc99fc63f..e5d829c152 100644 --- a/docs/get-started/snippets/quickstart/AspireSample/AspireSample.ServiceDefaults/AspireSample.ServiceDefaults.csproj +++ b/docs/get-started/snippets/quickstart/AspireSample/AspireSample.ServiceDefaults/AspireSample.ServiceDefaults.csproj @@ -15,9 +15,9 @@ - - - + + + diff --git a/docs/whats-new/index.yml b/docs/whats-new/index.yml index 269807a441..8d22956750 100644 --- a/docs/whats-new/index.yml +++ b/docs/whats-new/index.yml @@ -1,9 +1,9 @@ ### YamlMime:Landing -title: .NET Aspire documentation — what's new? +title: .NET Aspire — what's new? summary: Welcome to what's new in .NET Aspire docs. Use this page to quickly find the latest changes. metadata: - title: .NET Aspire documentation what's new? + title: .NET Aspire what's new? description: Learn about new and updated content in .NET Aspire docs. ms.date: 02/08/2024 ms.topic: landing-page diff --git a/docs/whats-new/media/preview-3/trace-duration.png b/docs/whats-new/media/preview-3/trace-duration.png index cb7d929ac972cad4c13cc36ea3d61408444b10f0..b51f4629730f9d900c56b91402e3c45ca5047316 100644 GIT binary patch literal 51513 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 literal 51030 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 + ``` -If you're using Visual Studio, you can use the NuGet Package Manager and update all packages being used via the IDE (be sure to check the pre-release checkbox in the UI). +If you're using Visual Studio, use the NuGet Package Manager to update all packages for the solution. Ensure that the pre-release checkbox is checked. ### API changes -Additionally we made some hosting API changes in preview 3. +There are several hosting API changes in preview 3: + +- In existing code, `builder.WithServiceBinding(...)` should now be changed to `builder.WithEndpoint(...)` to retain the same behavior (there are similar changes for other resource types as well). The `WithServiceBinding` API has been obsoleted, while it will continue to work with a compile warning, you should update it before it's removed in the next preview. -- In existing code, `builder.WithServiceBinding(...)` should now be changed to `builder.WithEndpoint(...)` to retain the same behavior (there are similar changes for other resource types as well). The `WithServiceBinding` API has been obsoleted, so it will continue to work, but with a compile warning, and will be removed in the next preview. +For more information on API changes, see [Breaking changes and new APIs](#breaking-changes-and-new-apis). ## Dashboard updates and refactoring -We've made a major refactoring of the Aspire Dashboard, splitting it out into its own independent component. The dashboard used to be run as part of the host project, and that caused version conflicts between the dashboard and project dependencies. The dashboard is now its own independent executable, that communicates via gRPC to an endpoint to retrieve information about the projects, containers, their status and logs. +The [.NET Aspire Dashboard](../fundamentals/dashboard.md) has undergone a lot of refactoring, splitting it out into its own independent component. The dashboard used to be run as part of the host project, and that caused version conflicts between the dashboard and project dependencies. The dashboard is now its own independent executable, that communicates via gRPC to an endpoint to retrieve information about the projects, containers, their status and logs. This refactoring enables the dashboard to be more easily used for real-time runtime diagnostics after deployment, as hosts can implement the same gRPC contract/endpoint for project and dependency status. -Refactoring should not require any changes to Aspire Projects as there have been no related API changes for the projects themselves. Using the dashboard is unchanged in your development environment. +Refactoring shouldn't require any changes to .NET Aspire projects as there have been no related API changes for the projects themselves. Using the dashboard is unchanged in your development environment. ### Localization and accessibility -We've made small changes across the dashboard to support localization and accessibility. Changes include improving color contrast, adding accessibility attributes, and moving UI text into resource files. +Many small changes across the dashboard have been made to support localization and accessibility. These changes include improving color contrast, adding accessibility attributes, and moving UI text into resource files. -An example of an improvement is how the dashboard indicates trace length. Previously there was a subtle color gradient on each row that didn't meet accessibility requirements. In preview 3 we've replaced the color gradient with a radial progress icon: +An example of an improvement is how the dashboard indicates trace length. Previously there was a subtle color gradient on each row that didn't meet accessibility requirements. In preview 3 this was replaced with a radial progress icon: -:::image type="content" source="media/preview-3/trace-duration.png" lightbox="media/preview-3/trace-duration.png" alt-text="Trace details page with new radial icon."::: +:::image type="content" source="media/preview-3/trace-duration.png" lightbox="media/preview-3/trace-duration.png" alt-text="Trace details page with new radial icon used to quickly differentiate trace lengths."::: ### New resource details view -The resources page grid was bursting at the seams with information. In preview 3 we've introduced a resource details view. The grid continues to display important information, and additional details, including all of a resources properties, are available in the details view. +The resources page grid was bursting at the seams with information. In preview 3 there's now a resource details view. The grid continues to display important information, and additional details, including all of a resources properties, are available in the details view. :::image type="content" source="media/preview-3/resource-details-view.png" lightbox="media/preview-3/resource-details-view.png" alt-text="Resource details view."::: @@ -70,24 +93,24 @@ The dashboard telemetry pages show off a number of improvements: ## Component updates -[Aspire components](../fundamentals/components-overview.md) are a curated suite of NuGet packages specifically selected to facilitate the integration of cloud-native applications with prominent services and platforms. Each component furnishes essential cloud-native functionalities through either automatic provisioning or standardized configuration patterns. .NET Aspire components can be used without an orchestrator project, but they're designed to work best with the .NET Aspire app host. +[.NET Aspire components](../fundamentals/components-overview.md) are a curated suite of NuGet packages specifically selected to facilitate the integration of cloud-native applications with prominent services and platforms. Each component furnishes essential cloud-native functionalities through either automatic provisioning or standardized configuration patterns. .NET Aspire components can be used without an orchestrator project, but they're designed to work best with the .NET Aspire app host. ### Azure AI OpenAI component -This component enables integration of the Azure AI OpenAI or OpenAI services from an Aspire project. Assuming you already have an OpenAI service provisioned, you can use OpenAI from your projects. +This component enables integration of the Azure AI OpenAI or OpenAI services from a .NET Aspire project. Assuming you already have an OpenAI service provisioned, you can use OpenAI from your projects. ```csharp using Azure.AI.OpenAI; var builder = WebApplication.CreateBuilder(args); -// Add service defaults & Aspire components. +// Add service defaults and components. builder.AddServiceDefaults(); builder.AddAzureOpenAI("OpenAI"); -ar app = builder.Build(); +var app = builder.Build(); -app.MapGet("/chat-complete", static async (string request, OpenAIClient client) => +app.MapGet("/chat", static async (string request, OpenAIClient client) => { var options = new ChatCompletionsOptions( "gpt-35-turbo", [new ChatRequestUserMessage(request)]); @@ -107,7 +130,7 @@ For more information, see [GitHub: .NET Aspire.Azure.AI.OpenAI](https://github.c ### Component and hosting for Apache Kafka -Guillaume Delahaye ([@g7eg6e](https://github.com/g7ed6e)) has contributed a library that wraps `Confluent.Kafka` binaries for producing and consuming messages to an Apache Kafka broker. The Aspire integration enables corresponding health check, logging and metrics. +[Guillaume Delahaye (@g7eg6e)](https://github.com/g7ed6e) has contributed a library that wraps `Confluent.Kafka` binaries for producing and consuming messages to an Apache Kafka broker. The .NET Aspire integration enables corresponding health checks, logging and metrics. Consider the following example: ```csharp var builder = WebApplication.CreateBuilder(args); @@ -145,9 +168,9 @@ var messaging = builder.AddKafka("kafka"); For more information, see [GitHub: .NET Aspire.Confluent.Kafka](https://github.com/dotnet/aspire/tree/main/src/Components/Aspire.Confluent.Kafka). -### Component and component for Oracle with EF +### Component for Oracle with EF -A community contribution from Andre Vieira ([@andrevlins](https://github.com/andrevlins)), this provides integration of the Oracle Entity Framework provider into Aspire, enabling connection pooling, health check, logging and telemetry. +A community contribution from [Andre Vieira (@andrevlins)](https://github.com/andrevlins), this provides integration of the Oracle Entity Framework provider into Aspire, enabling connection pooling, health check, logging and telemetry. ```csharp var builder = WebApplication.CreateBuilder(args); @@ -250,7 +273,9 @@ When deployed, `azd` will automatically provision the Cosmos DB resource and cre We've updated the Aspire component to use the new feature in `StackExchange.Redis` which supports . Redis logs will now be shown in both the console and structured logs in the dashboard. -## API changes +## Breaking changes and new APIs + +The following sections detail several breaking changes in preview 3. Additionally, several new APIs are introduced in this release. ### `WithServiceBinding` has changed to `WithEndpoint` From 7f27b98b81ad1104a1368cee939a298588dc23be Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 12 Feb 2024 14:35:19 -0600 Subject: [PATCH 11/18] A few more tweaks --- docs/whats-new/preview-3.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md index 340516320b..f1dc239c7c 100644 --- a/docs/whats-new/preview-3.md +++ b/docs/whats-new/preview-3.md @@ -135,7 +135,7 @@ For more information, see [GitHub: .NET Aspire.Azure.AI.OpenAI](https://github.c ```csharp var builder = WebApplication.CreateBuilder(args); -// Add service defaults & Aspire components. +// Add service defaults and components. builder.AddServiceDefaults(); builder.AddKafkaProducer("kafka"); @@ -175,7 +175,7 @@ A community contribution from [Andre Vieira (@andrevlins)](https://github.com/an ```csharp var builder = WebApplication.CreateBuilder(args); -// Add service defaults & Aspire components. +// Add service defaults and components. builder.AddServiceDefaults(); builder.AddOracleDatabaseDbContext("catalog"); @@ -209,7 +209,7 @@ Bradley Grainger ([@bgrainger](https://github.com/bgrainger)) has contributed an ```csharp var builder = WebApplication.CreateBuilder(args); -// Add service defaults & Aspire components. +// Add service defaults and components. builder.AddServiceDefaults(); builder.AddMySqlDbContext("catalog"); @@ -406,11 +406,11 @@ The .NET Aspire samples are located in Date: Mon, 12 Feb 2024 14:36:16 -0600 Subject: [PATCH 12/18] Fix link --- docs/whats-new/preview-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md index f1dc239c7c..684a9c6e1c 100644 --- a/docs/whats-new/preview-3.md +++ b/docs/whats-new/preview-3.md @@ -406,7 +406,7 @@ The .NET Aspire samples are located in Date: Tue, 13 Feb 2024 06:30:04 -0600 Subject: [PATCH 13/18] Add NuGet package links, and another edit pass --- docs/whats-new/preview-3.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md index 684a9c6e1c..b5a713521a 100644 --- a/docs/whats-new/preview-3.md +++ b/docs/whats-new/preview-3.md @@ -1,7 +1,7 @@ --- title: .NET Aspire preview 3 description: .NET Aspire preview 3 is now available and includes many improvements and new capabilities -ms.date: 02/12/2024 +ms.date: 02/13/2024 --- # .NET Aspire preview 3 @@ -99,6 +99,8 @@ The dashboard telemetry pages show off a number of improvements: This component enables integration of the Azure AI OpenAI or OpenAI services from a .NET Aspire project. Assuming you already have an OpenAI service provisioned, you can use OpenAI from your projects. +- [Aspire.Azure.AI.OpenAI](https://www.nuget.org/packages/Aspire.Azure.AI.OpenAI) NuGet 📦 package. + ```csharp using Azure.AI.OpenAI; @@ -130,7 +132,11 @@ For more information, see [GitHub: .NET Aspire.Azure.AI.OpenAI](https://github.c ### Component and hosting for Apache Kafka -[Guillaume Delahaye (@g7eg6e)](https://github.com/g7ed6e) has contributed a library that wraps `Confluent.Kafka` binaries for producing and consuming messages to an Apache Kafka broker. The .NET Aspire integration enables corresponding health checks, logging and metrics. Consider the following example: +[Guillaume Delahaye (@g7eg6e)](https://github.com/g7ed6e) has contributed a library that wraps `Confluent.Kafka` binaries for producing and consuming messages to an Apache Kafka broker. The .NET Aspire integration enables corresponding health checks, logging and metrics. + +- [Aspire.Confluent.Kafka](https://www.nuget.org/packages/Aspire.Confluent.Kafka) NuGet 📦 package. + +Consider the following example: ```csharp var builder = WebApplication.CreateBuilder(args); @@ -172,6 +178,8 @@ For more information, see [GitHub: .NET Aspire.Confluent.Kafka](https://github.c A community contribution from [Andre Vieira (@andrevlins)](https://github.com/andrevlins), this provides integration of the Oracle Entity Framework provider into Aspire, enabling connection pooling, health check, logging and telemetry. +- [Aspire.Oracle.EntityFrameworkCore](https://www.nuget.org/packages/Aspire.Oracle.EntityFrameworkCore) NuGet 📦 package. + ```csharp var builder = WebApplication.CreateBuilder(args); @@ -206,6 +214,8 @@ For more information, see [GitHub: .NET Aspire.Oracle.EntityFrameworkCore](https Bradley Grainger ([@bgrainger](https://github.com/bgrainger)) has contributed an Aspire component for MySQL named `Aspire.Pomelo.EntityFrameworkCore.MySql`. This wraps the `Pomelo.EntityFrameworkCore.MySql` library which is an Entity Framework Core provider for MySQL compatible databases. It supports EF Core up to its latest version and uses MySqlConnector for high-performance database server communication. The Aspire integration enables connection pooling, health check, logging and telemetry. +- [Aspire.Pomelo.EntityFrameworkCore.MySql](https://www.nuget.org/packages/Aspire.Pomelo.EntityFrameworkCore.MySql) NuGet 📦 package. + ```csharp var builder = WebApplication.CreateBuilder(args); @@ -354,7 +364,7 @@ builder.AddProject("serviceb") ## Add support for Orleans in .NET Aspire -This preview adds support for [Orleans](/dotnet/orleans/overview), allowing you to configure a cluster in your app host, specifying the resources the cluster uses. For example, you can specify that an Azure Table will be used for cluster membership, an Azure Redis resource will be used for the grain directory, and an Azure Blob Storage resource will be used to store grain state. The integration currently support Redis and Azure Table & Blob storage resources. Support for other resources will be added later. +Starting with preview 3, support for [Orleans](/dotnet/orleans/overview) was added, allowing you to configure a cluster in your app host, specifying the resources the cluster uses. For example, you can specify that an Azure Table will be used for cluster membership, an Azure Redis resource will be used for the grain directory, and an Azure Blob Storage resource will be used to store grain state. The integration currently support Redis and Azure Table & Blob storage resources. Support for other resources will be added later. In the app host project, an Orleans cluster can be declared using the `AddOrleans` method, and then configured with clustering, grain storage, grain directory, and other providers using methods on the returned builder: From 1418f3c8cc8d76d7d76f9c88ece6a7c67d66494a Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 13 Feb 2024 06:51:06 -0600 Subject: [PATCH 14/18] Another light edit pass --- docs/whats-new/preview-3.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md index b5a713521a..7db59d7724 100644 --- a/docs/whats-new/preview-3.md +++ b/docs/whats-new/preview-3.md @@ -29,7 +29,7 @@ The complete set of [.NET Aspire setup and tooling](../fundamentals/setup-toolin dotnet workload install aspire ``` -After updating you can run `dotnet workload list` to see the updated version (your version of Visual Studio may differ): +After updating run `dotnet workload list` to see the updated version (your version of Visual Studio may differ): ```dotnetcli dotnet workload list @@ -132,7 +132,7 @@ For more information, see [GitHub: .NET Aspire.Azure.AI.OpenAI](https://github.c ### Component and hosting for Apache Kafka -[Guillaume Delahaye (@g7eg6e)](https://github.com/g7ed6e) has contributed a library that wraps `Confluent.Kafka` binaries for producing and consuming messages to an Apache Kafka broker. The .NET Aspire integration enables corresponding health checks, logging and metrics. +[Guillaume Delahaye (@g7eg6e)](https://github.com/g7ed6e) contributed a library that wraps `Confluent.Kafka` binaries for producing and consuming messages to an Apache Kafka broker. The .NET Aspire integration enables corresponding health checks, logging and metrics. - [Aspire.Confluent.Kafka](https://www.nuget.org/packages/Aspire.Confluent.Kafka) NuGet 📦 package. @@ -212,7 +212,7 @@ For more information, see [GitHub: .NET Aspire.Oracle.EntityFrameworkCore](https ### Component and hosting for MySql with EF -Bradley Grainger ([@bgrainger](https://github.com/bgrainger)) has contributed an Aspire component for MySQL named `Aspire.Pomelo.EntityFrameworkCore.MySql`. This wraps the `Pomelo.EntityFrameworkCore.MySql` library which is an Entity Framework Core provider for MySQL compatible databases. It supports EF Core up to its latest version and uses MySqlConnector for high-performance database server communication. The Aspire integration enables connection pooling, health check, logging and telemetry. +[Bradley Grainger (@bgrainger)](https://github.com/bgrainger) has contributed an Aspire component for MySQL named `Aspire.Pomelo.EntityFrameworkCore.MySql`. This wraps the `Pomelo.EntityFrameworkCore.MySql` library which is an Entity Framework Core provider for MySQL compatible databases. It supports EF Core up to its latest version and uses MySqlConnector for high-performance database server communication. The Aspire integration enables connection pooling, health check, logging and telemetry. - [Aspire.Pomelo.EntityFrameworkCore.MySql](https://www.nuget.org/packages/Aspire.Pomelo.EntityFrameworkCore.MySql) NuGet 📦 package. @@ -322,7 +322,7 @@ builder.AddRedis("myredis2").WithRedisCommander(); ### PostgreSQL PgAdmin resource extension -Andre Vieira has also contributed a resource extension to make it easier to deploy the [pgAdmin](https://www.pgadmin.org/) container to manage your PostgreSQL database instances. Similar to the RedisCommander functionality above, this makes it easy to automatically deploy a pgadmin container when running an Aspire project. +[Andre Vieira (@andrevlins)](https://github.com/andrevlins) has also contributed a resource extension to make it easier to deploy the [pgAdmin](https://www.pgadmin.org/) container to manage your PostgreSQL database instances. Similar to the RedisCommander functionality above, this makes it easy to automatically deploy a pgadmin container when running an Aspire project. ```csharp var builder = DistributedApplication.CreateBuilder(args); From 445efa6d1b625c275f516332899292c9dbc5ef2e Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 13 Feb 2024 08:12:15 -0600 Subject: [PATCH 15/18] Apply suggestions from code review Co-authored-by: alexwolfmsft <93200798+alexwolfmsft@users.noreply.github.com> --- docs/fundamentals/setup-tooling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/fundamentals/setup-tooling.md b/docs/fundamentals/setup-tooling.md index 44cbe60d55..eaaa3191dd 100644 --- a/docs/fundamentals/setup-tooling.md +++ b/docs/fundamentals/setup-tooling.md @@ -30,7 +30,7 @@ The .NET Aspire workload installs internal dependencies and makes available othe # [Visual Studio](#tab/visual-studio) -Starting with Visual Studio 2022 17.10 Preview 1 includes the **.NET Aspire preview 3** workload by default. To verify that you have the .NET Aspire workload installed, run the following command: +Visual Studio 2022 17.10 Preview 1 or higher includes the **.NET Aspire preview 3** workload by default. To verify that you have the .NET Aspire workload installed, run the following command: ```dotnetcli dotnet workload list From 7adf773d9e656500a49216118b5b0ff4d54a79ad Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 13 Feb 2024 08:26:03 -0600 Subject: [PATCH 16/18] Apply suggestions from code review Co-authored-by: alexwolfmsft <93200798+alexwolfmsft@users.noreply.github.com> --- docs/whats-new/preview-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md index 7db59d7724..aa80f2bb57 100644 --- a/docs/whats-new/preview-3.md +++ b/docs/whats-new/preview-3.md @@ -79,7 +79,7 @@ An example of an improvement is how the dashboard indicates trace length. Previo ### New resource details view -The resources page grid was bursting at the seams with information. In preview 3 there's now a resource details view. The grid continues to display important information, and additional details, including all of a resources properties, are available in the details view. +The resources page grid previously displayed an overload of information. Preview 3 now includes a resource details view for improved readability. The grid continues to display important information, while the details view shows additional data, including all of the resource's properties. :::image type="content" source="media/preview-3/resource-details-view.png" lightbox="media/preview-3/resource-details-view.png" alt-text="Resource details view."::: From f8cb56495f8e6b3885d18642d7806679f5a02abb Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 13 Feb 2024 09:27:47 -0600 Subject: [PATCH 17/18] Add release link --- docs/whats-new/index.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/whats-new/index.yml b/docs/whats-new/index.yml index 8d22956750..2b4d2f61d0 100644 --- a/docs/whats-new/index.yml +++ b/docs/whats-new/index.yml @@ -18,6 +18,8 @@ landingContent: linkLists: - linkListType: whats-new links: + - text: .NET Aspire 8.0 preview 3 + url: https://github.com/dotnet/aspire/releases/tag/v8.0.0-preview.3.24105.21 - text: .NET Aspire 8.0 preview 2 url: https://github.com/dotnet/aspire/releases/tag/v8.0.0-preview.2.23619.3 - text: .NET Aspire 8.0 preview 1 From 23ccd60314f650cb0813836d2efbb8db87fa7984 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 13 Feb 2024 09:28:53 -0600 Subject: [PATCH 18/18] Apply suggestions from code review Co-authored-by: Reuben Bond <203839+ReubenBond@users.noreply.github.com> --- docs/whats-new/preview-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/whats-new/preview-3.md b/docs/whats-new/preview-3.md index aa80f2bb57..2260711d76 100644 --- a/docs/whats-new/preview-3.md +++ b/docs/whats-new/preview-3.md @@ -364,7 +364,7 @@ builder.AddProject("serviceb") ## Add support for Orleans in .NET Aspire -Starting with preview 3, support for [Orleans](/dotnet/orleans/overview) was added, allowing you to configure a cluster in your app host, specifying the resources the cluster uses. For example, you can specify that an Azure Table will be used for cluster membership, an Azure Redis resource will be used for the grain directory, and an Azure Blob Storage resource will be used to store grain state. The integration currently support Redis and Azure Table & Blob storage resources. Support for other resources will be added later. +Preview 3 adds support for [Orleans](/dotnet/orleans/overview) v8.1.0-preview1 or later, allowing you to configure a cluster in your app host, specifying the resources the cluster uses. For example, you can specify that an Azure Table will be used for cluster membership, an Azure Redis resource will be used for the grain directory, and an Azure Blob Storage resource will be used to store grain state. The integration currently support Redis and Azure Table & Blob storage resources. Support for other resources will be added later. In the app host project, an Orleans cluster can be declared using the `AddOrleans` method, and then configured with clustering, grain storage, grain directory, and other providers using methods on the returned builder: