{"id":56809,"date":"2025-05-19T10:33:50","date_gmt":"2025-05-19T17:33:50","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/dotnet\/?p=56809"},"modified":"2025-07-29T12:10:01","modified_gmt":"2025-07-29T19:10:01","slug":"introducing-dotnet-aspire-93","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/introducing-dotnet-aspire-93\/","title":{"rendered":".NET Aspire 9.3 is here and enhanced with GitHub Copilot!"},"content":{"rendered":"<p>Today, we&#8217;re thrilled to announce the release of <strong><a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/whats-new\/dotnet-aspire-9.3\">.NET\u202fAspire 9.3<\/a><\/strong>! This update brings a host of quality improvements, integration enhancements, and API updates. We&#8217;re most excited about bringing the power of GitHub Copilot to your .NET Aspire dashboard to help you with analyzing your applications, debugging, and improving them without leaving your dashboard.<\/p>\n<h2>Github Copilot and the .NET Aspire Dashboard<\/h2>\n<p>Introducing GitHub Copilot in the .NET Aspire dashboard! GitHub Copilot is your new AI debugging assistant.<\/p>\n<p>GitHub Copilot supercharges the dashboard&#8217;s OpenTelemetry debugging and diagnostics experience. With AI, you can:<\/p>\n<ul>\n<li>Review hundreds of log messages with a single click<\/li>\n<li>Investigate the root cause of errors across multiple apps<\/li>\n<li>Highlight performance issues in traces<\/li>\n<li>Explain obscure error codes using AI&#8217;s huge knowledge repository<\/li>\n<\/ul>\n<p>You&#8217;ll have access to GitHub Copilot in the dashboard when you launch your app from Visual Studio or Visual Studio Code.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/05\/resources-icebreakers-light.png\" alt=\"The initial Copilot panel on the .NET Aspire Dashboard\" \/><\/p>\n<p>Developers love the insight that distributed traces provide in complex apps. AI excels at analyzing large distributed traces and logs to identify the root cause of issues.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/05\/trace-analyze-light.png\" alt=\"Copilot analyzing the trace output in the .NET Aspire dashboard\" \/><\/p>\n<p>Watch Copilot in action &#8211; check out this video to see live interactions with the new GitHub Copilot feature:<\/p>\n<p><iframe width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/pmghH7KjPSE\" allowfullscreen><\/iframe><\/p>\n<p>For more details on requirements and how to get started, see <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/fundamentals\/dashboard\/copilot\">GitHub Copilot in the .NET Aspire dashboard<\/a>.<\/p>\n<h2>Other Dashboard Updates<\/h2>\n<p>.NET Aspire 9.3 introduces a context menu to the Resource Graph view. This context menu provides quick access to a resource&#8217;s telemetry, commands, and URLs.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/05\/graph-contextmenu.png\" alt=\"The context menu on the Resource Graph\" \/><\/p>\n<p>On the Traces page, the dashboard can now visualize outgoing calls to resources that don&#8217;t emit their own telemetry. This includes resources like databases, caches, and other infrastructure elements that lack built-in tracing.<\/p>\n<p>Previously, these dependencies were invisible on the Traces page. Their inclusion in version 9.3 helps you understand the complete chain of dependencies in a call, and allows you to filter results to only traces that include these external dependencies.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2025\/05\/traces-uninstrumented-resources.png\" alt=\"Improved traces resource visualization\" \/><\/p>\n<p>Finally, version 9.3 includes a range of quality-of-life improvements that make the dashboard easier to use than ever:<\/p>\n<ul>\n<li>Remembering the state of the resource filter on the Resources page<\/li>\n<li>Preserving your friendly resource names in the console logs URL<\/li>\n<li>Displaying a warning notification when metrics collection is paused<\/li>\n<\/ul>\n<h2>Integration Updates<\/h2>\n<p>With this release, we have introduced an integration for hosting your own <a href=\"https:\/\/learn.microsoft.com\/aspnet\/core\/fundamentals\/servers\/yarp\/yarp-overview\">YARP<\/a> instance using the <code>Aspire.Hosting.Yarp<\/code> package. You can then configure it with code similar to:<\/p>\n<pre><code class=\"language-csharp\">var yarp = builder.AddYarp(\"myyarp\")\r\n                  .WithConfigFile(\"path\/to\/config\/file\");<\/code><\/pre>\n<p>We have also updated the MySQL integration so that it now creates the specified database when you call <code>AddDatabase<\/code> in AppHost.<\/p>\n<p>The Postgres, Redis, and SQL Server integrations have been enhanced with new APIs that make it easier to configure the port and password when using the <code>RunAsContainer<\/code> method:<\/p>\n<pre><code class=\"language-csharp\"> var sql = builder.AddAzureSqlServer(\"sql\");\r\n\r\n sql.RunAsContainer(c =&gt;\r\n {\r\n    c.WithHostPort(12455);\r\n });<\/code><\/pre>\n<h3>Azure Integrations<\/h3>\n<p>We&#8217;ve simplified working with Azure Blob Storage by allowing you to create and add blob containers directly in the AppHost.<\/p>\n<pre><code class=\"language-csharp\">var storage = builder.AddAzureStorage(\"storage\").RunAsEmulator();\r\nvar queue = storage.AddQueues(\"queue\");\r\nvar blob = storage.AddBlobs(\"blob\");\r\nvar myBlobContainer = blob.AddBlobContainer(\"myblobcontainer\");\r\n\r\nvar app = builder.AddAzureFunctionsProject&lt;Projects.MyApp&gt;(\"myapp\")\r\n    .WithExternalHttpEndpoints()\r\n    .WithReference(myBlobContainer).WaitFor(myBlobContainer)<\/code><\/pre>\n<p>In the client, this container can be accessed directly by name during configuration:<\/p>\n<pre><code class=\"language-csharp\">builder.AddAzureBlobContainerClient(\"myblobcontainer\");<\/code><\/pre>\n<p>Subsequent requests for a <code>BlobContainerClient<\/code> will receive a client for the specified BlobContainer.<\/p>\n<p>We&#8217;ve also introduced two new client APIs for working with Azure KeyVault: <strong>AddAzureKeyVaultKeyClient<\/strong> and <strong>AddAzureKeyVaultCertificateClient<\/strong> that will help you work with keys and certificates from your KeyVault.<\/p>\n<h2>App Model updates<\/h2>\n<p>The Custom URLs feature has received a few API updates that make it easier to customize your resource URLs. You can now control whether the URL is visible on the Dashboard&#8217;s resources page or the resource details page. You can also use relative URLs for the endpoints they reference. There&#8217;s also a new overload of <code>WithUrlForEndpoint<\/code> that allows you to add extra URLs to an endpoint.<\/p>\n<pre><code class=\"language-csharp\">builder.AddProject&lt;Projects.ServiceA&gt;(\"servicea\")\r\n    .WithUrls(c =&gt;\r\n    {\r\n        c.Urls.Add(new() { Url = \"http:\/\/example.com\/\", DisplayLocation = UrlDisplayLocation.SummaryAndDetails });\r\n        c.Urls.Add(new() { Url = \"http:\/\/example.com\/internal\", DisplayLocation = UrlDisplayLocation.DetailsOnly });\r\n    })\r\n    .WithUrlForEndpoint(\"http\", url =&gt;\r\n    {\r\n        url.Url = \"\/sub-path\";\r\n    });<\/code><\/pre>\n<h2>Publishers update<\/h2>\n<p>In .NET Aspire 9.2 we introduced a new way to package and deploy your .NET Aspire systems called <strong>Publishers<\/strong>. The team is working on and evolving this preview feature, and they&#8217;re getting a major update in 9.3.<\/p>\n<p>.NET Aspire 9.3 supports preview support for the following environment resources:<\/p>\n<pre><code class=\"language-csharp\">AddDockerComposeEnvironment\r\nAddKubernetesEnvironment\r\nAddAzureContainerAppEnvironment\r\nAddAzureAppServiceEnvironment<\/code><\/pre>\n<p>There are additional methods available to customize your Docker Compose and Kubernetes configurations. More details are available in the <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/whats-new\/dotnet-aspire-9.3#deployment--publish\">&#8216;What&#8217;s New&#8217; article on Learn<\/a>, and you can follow its progress in the <a href=\"https:\/\/github.com\/dotnet\/aspire\">.NET Aspire GitHub Repository<\/a><\/p>\n<h2>Aspire and Azure App Service<\/h2>\n<p>Work is underway to bring .NET Aspire solutions to Azure App Service. Our colleagues have a blog post sharing details of a preview version of tools that will help you publish your application to Azure App Service. Read more at their <a href=\"https:\/\/aka.ms\/Build25\/blog\/AspireAppService\">blog post<\/a>.<\/p>\n<h2>Aspire CLI<\/h2>\n<p>The .NET Aspire CLI has been evolving quickly since we <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/whats-new\/dotnet-aspire-9.2#-aspire-cli-preview\">debuted it as a preview feature in .NET Aspire 9.2<\/a>. There are a number of stability fixes, improvements to error handling and changes to the publish process.<\/p>\n<p>The CLI will now search for the app host project recursively and write a <code>.aspire<\/code> folder to help remember that location. Additionally, when starting a .NET Aspire solution, the CLI will now wait for the dashboard service to be healthy before showing the dashboard link.<\/p>\n<h2>Summary<\/h2>\n<p>There are some great updates in this release of .NET Aspire and the team thinks the new GitHub Copilot interactions are going to help a lot of users to diagnose issues in their applications. Update to the latest version of .NET Aspire and try out the new features. For a thorough description of all of the enhancements in this release of .NET Aspire, <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/whats-new\/dotnet-aspire-9.3\">check out the release notes<\/a> and the <a href=\"https:\/\/github.com\/dotnet\/aspire\">GitHub repository<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>.NET Aspire 9.3 is the biggest release of .NET Aspire yet, with the introduction of GitHub Copilot directly into the .NET Aspire Dashboard, updates for integrations, app model enhancements, and more.<\/p>\n","protected":false},"author":3420,"featured_media":56810,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[685,7509,7783,756,7252,7237,2904],"tags":[7793],"class_list":["post-56809","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-aspnetcore","category-aspire","category-csharp","category-cloud","category-containers","category-docker","tag-copilot"],"acf":[],"blog_post_summary":"<p>.NET Aspire 9.3 is the biggest release of .NET Aspire yet, with the introduction of GitHub Copilot directly into the .NET Aspire Dashboard, updates for integrations, app model enhancements, and more.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/56809","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/3420"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=56809"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/56809\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/56810"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=56809"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=56809"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=56809"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}