{"id":2038,"date":"2025-05-19T18:12:06","date_gmt":"2025-05-19T18:12:06","guid":{"rendered":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/05\/19\/net-aspire-9-3-is-here-and-enhanced-with-github-copilot\/"},"modified":"2025-05-19T18:12:06","modified_gmt":"2025-05-19T18:12:06","slug":"net-aspire-9-3-is-here-and-enhanced-with-github-copilot","status":"publish","type":"post","link":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/05\/19\/net-aspire-9-3-is-here-and-enhanced-with-github-copilot\/","title":{"rendered":".NET Aspire 9.3 is here and enhanced with GitHub Copilot!"},"content":{"rendered":"<p>Today, we\u2019re 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\u2019re 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\u2019s OpenTelemetry debugging and diagnostics experience. With AI, you can:<\/p>\n<p>Review hundreds of log messages with a single click<br \/>\nInvestigate the root cause of errors across multiple apps<br \/>\nHighlight performance issues in traces<br \/>\nExplain obscure error codes using AI\u2019s huge knowledge repository<\/p>\n<p>You\u2019ll have access to GitHub Copilot in the dashboard when you launch your app from Visual Studio or Visual Studio Code.<\/p>\n\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\n<p>Watch Copilot in action \u2013 check out this video to see live interactions with the new GitHub Copilot feature:<\/p>\n\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\u2019s telemetry, commands, and URLs.<\/p>\n\n<p>On the Traces page, the dashboard can now visualize outgoing calls to resources that don\u2019t 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\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<p>Remembering the state of the resource filter on the Resources page<br \/>\nPreserving your friendly resource names in the console logs URL<br \/>\nDisplaying a warning notification when metrics collection is paused<\/p>\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 Aspire.Hosting.Yarp package. You can then configure it with code similar to:<\/p>\n<p>var yarp = builder.AddYarp(&#8220;myyarp&#8221;)<br \/>\n                  .WithConfigFile(&#8220;path\/to\/config\/file&#8221;);<\/p>\n<p>We have also updated the MySQL integration so that it now creates the specified database when you call AddDatabase 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 RunAsContainer method:<\/p>\n<p> var sql = builder.AddAzureSqlServer(&#8220;sql&#8221;);<\/p>\n<p> sql.RunAsContainer(c =&gt;<br \/>\n {<br \/>\n    c.WithHostPort(12455);<br \/>\n });<\/p>\n<h3>Azure Integrations<\/h3>\n<p>We\u2019ve simplified working with Azure Blob Storage by allowing you to create and add blob containers directly in the AppHost.<\/p>\n<p>var storage = builder.AddAzureStorage(&#8220;storage&#8221;).RunAsEmulator();<br \/>\nvar queue = storage.AddQueues(&#8220;queue&#8221;);<br \/>\nvar blob = storage.AddBlobs(&#8220;blob&#8221;);<br \/>\nvar myBlobContainer = blob.AddBlobContainer(&#8220;myblobcontainer&#8221;);<\/p>\n<p>var app = builder.AddAzureFunctionsProject&lt;Projects.MyApp&gt;(&#8220;myapp&#8221;)<br \/>\n    .WithExternalHttpEndpoints()<br \/>\n    .WithReference(myBlobContainer).WaitFor(myBlobContainer)<\/p>\n<p>In the client, this container can be accessed directly by name during configuration:<\/p>\n<p>builder.AddAzureBlobContainerClient(&#8220;myblobcontainer&#8221;);<\/p>\n<p>Subsequent requests for a BlobContainerClient will receive a client for the specified BlobContainer.<\/p>\n<p>We\u2019ve 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\u2019s resources page or the resource details page. You can also use relative URLs for the endpoints they reference. There\u2019s also a new overload of WithUrlForEndpoint that allows you to add extra URLs to an endpoint.<\/p>\n<p>builder.AddProject&lt;Projects.ServiceA&gt;(&#8220;servicea&#8221;)<br \/>\n    .WithUrls(c =&gt;<br \/>\n    {<br \/>\n        c.Urls.Add(new() { Url = &#8220;http:\/\/example.com\/&#8221;, DisplayLocation = UrlDisplayLocation.SummaryAndDetails });<br \/>\n        c.Urls.Add(new() { Url = &#8220;http:\/\/example.com\/internal&#8221;, DisplayLocation = UrlDisplayLocation.DetailsOnly });<br \/>\n    })<br \/>\n    .WithUrlForEndpoint(&#8220;http&#8221;, url =&gt;<br \/>\n    {<br \/>\n        url.Url = &#8220;\/sub-path&#8221;;<br \/>\n    });<\/p>\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\u2019re getting a major update in 9.3.<\/p>\n<p>.NET Aspire 9.3 supports preview support for the following environment resources:<\/p>\n<p>AddDockerComposeEnvironment<br \/>\nAddKubernetesEnvironment<br \/>\nAddAzureContainerAppEnvironment<br \/>\nAddAzureAppServiceEnvironment<\/p>\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\">\u2018What\u2019s New\u2019 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 .aspire 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<p>The post <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/introducing-dotnet-aspire-93\/\">.NET Aspire 9.3 is here and enhanced with GitHub Copilot!<\/a> appeared first on <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\">.NET Blog<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Today, we\u2019re thrilled to announce the release of .NET\u202fAspire 9.3! This update brings a host of quality improvements, integration enhancements, [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[7],"tags":[],"class_list":["post-2038","post","type-post","status-publish","format-standard","hentry","category-dotnet"],"_links":{"self":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/2038","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/comments?post=2038"}],"version-history":[{"count":0,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/2038\/revisions"}],"wp:attachment":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media?parent=2038"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/categories?post=2038"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/tags?post=2038"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}