{"id":2524,"date":"2025-09-25T18:14:46","date_gmt":"2025-09-25T18:14:46","guid":{"rendered":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/09\/25\/announcing-aspire-9-5\/"},"modified":"2025-09-25T18:14:46","modified_gmt":"2025-09-25T18:14:46","slug":"announcing-aspire-9-5","status":"publish","type":"post","link":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/09\/25\/announcing-aspire-9-5\/","title":{"rendered":"Announcing Aspire 9.5"},"content":{"rendered":"<p>Aspire 9.5 is here with exciting new features and improvements that enhance the developer experience for building distributed applications.<\/p>\n<p><em>For the complete list of changes and technical details, visit the <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/whats-new\/dotnet-aspire-9-5\">official Aspire 9.5 release notes<\/a>.<\/em><\/p>\n<p>Let\u2019s dive into some key highlights of this release.<\/p>\n<h2>Upgrading to Aspire 9.5<\/h2>\n<p>You can install the Aspire CLI at the command-line with these commands:<\/p>\n<p># Bash<br \/>\ncurl -sSL https:\/\/aspire.dev\/install.sh | bash<\/p>\n<p># PowerShell<br \/>\niex &#8220;&amp; { $(irm https:\/\/aspire.dev\/install.ps1) }&#8221;<\/p>\n<p>One of the most exciting additions in Aspire 9.5 is the new <strong>aspire update command<\/strong> (in preview), which simplifies the upgrade process significantly. This automatically detects and updates your AppHost SDK and Aspire integrations.<\/p>\n<p>This preview command:<\/p>\n<p><strong>Updates your SDK and AppHost packages<\/strong> automatically<br \/>\n<strong>Validates package compatibility<\/strong> before applying changes<br \/>\n<strong>Supports channel awareness<\/strong> \u2013 choose stable, daily, or custom builds<br \/>\n<strong>Asks for confirmation<\/strong> before making changes<\/p>\n\n<div class=\"alert alert-primary\">\n<p class=\"alert-divider\"><strong>Preview Feature<\/strong><\/p>\n<p>The aspire update command is in preview and may change before general availability. We recommend using version control and inspecting changes after running it. Share your feedback about this feature on <a href=\"https:\/\/github.com\/dotnet\/aspire\/issues\">GitHub<\/a>!\n<\/p><\/div>\n\n<div class=\"alert alert-primary\">\n<p class=\"alert-divider\"><strong>Updating from Aspire 8<\/strong><\/p>\n<p>If you\u2019re still using the .NET Aspire workload (versions 8.x), follow the <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/get-started\/upgrade-to-aspire-9\">upgrade guide to Aspire 9<\/a> to upgrade to 9.5.\n<\/p><\/div>\n<h2>Enhanced CLI Experience<\/h2>\n<p>Aspire 9.5 brings significant improvements to the command-line experience, making it more powerful and user-friendly for developers.<\/p>\n<h2>Single-File AppHost (Preview)<\/h2>\n<p>One of the most revolutionary features in Aspire 9.5 is the <strong>file-based AppHost support<\/strong> \u2013 a preview feature that introduces support for .NET 10\u2019s new file-based apps. This means you can now create an Aspire AppHost with <strong>just one file and no project file needed<\/strong>! New and existing applications built with an AppHost project will continue to be supported.<\/p>\n<h3>What is File-Based AppHost?<\/h3>\n<p>The traditional Aspire AppHost requires a .csproj file and multiple files to get started. With file-based AppHost, you can define your entire distributed application in a single apphost.cs file. This builds on the work we\u2019re delivering with <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-dotnet-run-app\/\">.NET 10 that enables single-file applications<\/a>.<\/p>\n<p>This feature is currently behind a feature flag and requires .NET SDK 10.0.100 RC1 or later:<\/p>\n<p># Enable file-based AppHost support<br \/>\naspire config set features.singlefileAppHostEnabled true<\/p>\n<p>You can then use the aspire new command to create a new, blank file-based apphost with this content:<\/p>\n<p>#:sdk Aspire.AppHost.Sdk@9.5.0<\/p>\n<p>var builder = DistributedApplication.CreateBuilder(args);<\/p>\n<p>builder.Build().Run();<\/p>\n<p>Additionally, an apphost.run.json file will be written with launch profiles for your favorite code-editor to use.<\/p>\n<h3>Adding Resources and Projects to Your File-Based AppHost<\/h3>\n<p>Start adding integrations with aspire add and add your other projects with single line directives in your apphost.cs file.<\/p>\n<p>#:sdk Aspire.AppHost.Sdk@9.5.0<br \/>\n#:project MyBlazorApp<\/p>\n<p>var builder = DistributedApplication.CreateBuilder(args);<\/p>\n<p>\/\/ Add an ASP.NET Core project<br \/>\nbuilder.AddProject&lt;Projects.MyBlazorApp&gt;(&#8220;web&#8221;);<\/p>\n<p>builder.Build().Run();<\/p>\n<p>We can then add Redis to our growing web application by executing the command:<\/p>\n<p>aspire add Aspire.Hosting.Redis<\/p>\n<p>Then adding the appropriate AddRedis statement and WithReference methods in the AppHost.cs file:<\/p>\n<p>#:sdk Aspire.AppHost.Sdk@9.5.0<br \/>\n#:package Aspire.Hosting.Redis@9.4.2<br \/>\n#:project MyBlazorApp<\/p>\n<p>var builder = DistributedApplication.CreateBuilder(args);<\/p>\n<p>var cache = builder.AddRedis(&#8220;cache&#8221;);<\/p>\n<p>builder.AddProject&lt;Projects.MyBlazorApp&gt;(&#8220;web&#8221;)<br \/>\n    .WithReference(cache)<br \/>\n    .WaitForStart(cache);<\/p>\n<p>builder.Build().Run();<\/p>\n<p>This approach reduces the complexity of the Aspire configuration, especially for folks outside of the .NET ecosystem, without comprimising the full power of .NET. New users to Aspire can get started in seconds and can augment their existing applications with 1 command and 1 file. Learn more about file-based applications in our <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-dotnet-run-app\/\">announcement blog post<\/a>.<\/p>\n<h2>Dashboard Enhancements<\/h2>\n<p>The Aspire Dashboard has a handful of usability and functionality improvements in version 9.5, making it even more powerful for monitoring and debugging distributed applications.<\/p>\n<h3>Multi-Resource Console Logs<\/h3>\n<p>A long-awaited addition is the new <strong>\u201cAll\u201d option in console logs<\/strong> that streams logs from every running resource simultaneously with color-coded prefixes so that you can see the various services that generated the log entries.<\/p>\n\n<p>This unified view makes it much easier to understand the interactions between different services in your application.<\/p>\n<h3>New LLM Insights<\/h3>\n<p>Aspire 9.5 introduces the GenAI visualizer, which collates, summarizes, and visualizes LLM-centric calls within your app. When the dashboard detects AI telemetry, a sparkle icon () is presented that will allow you to explore the interaction with the LLM. You\u2019ll be able to see the prompts, responses, and even images returned from the LLM in the visualizer.<\/p>\n<p>The GenAI telemetry conventions are evolving rapidly and we will update this feature to stay compatible.<\/p>\n\n<h2>New and Updated Integrations<\/h2>\n<p>Aspire 9.5 introduces several new integrations and significantly enhances existing ones, making it easier to work with AI services, cloud resources, and development tools.<\/p>\n<h3>AI Hosting Integrations<\/h3>\n<p>The new <strong>AddOpenAI integration<\/strong> provides first-class support for modeling OpenAI endpoints and their associated models within your Aspire application.<\/p>\n<p>var apiKey = builder.AddParameter(&#8220;openai-api-key&#8221;, secret: true);<\/p>\n<p>var openai = builder.AddOpenAI(&#8220;openai&#8221;)<br \/>\n    .WithApiKey(apiKey)<br \/>\n    .WithEndpoint(&#8220;https:\/\/api.openai.com&#8221;);<\/p>\n<p>var chatModel = openai.AddModel(&#8220;chat&#8221;, &#8220;gpt-4o-mini&#8221;);<\/p>\n<p>Additionally, we are introducing support for a <strong>strongly-typed catalog for GitHub and Azure AI Foundry models<\/strong>. This gives you intellisense support for all the up-to-date models that you can use.<\/p>\n<p>var gpt4 = builder.AddAzureAIFoundry(&#8220;foundryresource).AddDeployment(&#8220;gpt4&#8221;, AIFoundryModel.OpenAI.Gpt4);<\/p>\n<p>var mistral = builder.AddGitHubModel(&#8220;mistral&#8221;, GitHubModel.MistralAI.MistralLarge2411);<\/p>\n<h3>Dev Tunnels Hosting Integration<\/h3>\n<p>Aspire 9.5 introduces <strong>first-class support for <a href=\"https:\/\/learn.microsoft.com\/azure\/developer\/dev-tunnels\/overview\">Azure Dev Tunnels<\/a><\/strong>.<\/p>\n<p>As a developer, this allows you to securely share your application running on your workstation with the outside network. You can test webhooks from public services, quickly get feedback from customers, and even test interactions from a mobile device using DevTunnels<\/p>\n<p>var builder = DistributedApplication.CreateBuilder(args);<\/p>\n<p>\/\/ Add a basic Dev Tunnel resource (default: private access)<br \/>\nvar tunnel = builder.AddDevTunnel(&#8220;dev-tunnel&#8221;)<br \/>\n    .WithAnonymousAccess();<\/p>\n<p>\/\/ Add your web application<br \/>\nvar webApp = builder.AddProject&lt;Projects.WebApp&gt;(&#8220;webapp&#8221;);<\/p>\n<p>\/\/ Connect the tunnel to the web application endpoint<br \/>\ntunnel.WithReference(webApp.GetEndpoint(&#8220;http&#8221;));<\/p>\n<p>builder.Build().Run();<\/p>\n<p>The Dev Tunnels integration automatically handles Azure authentication, tunnel lifecycle management, and provides public or private URLs (depending on configuration) to connected resources, making it easy to expose local development services securely to external consumers. Dev Tunnels also improves support for mobile dev, such as .NET MAUI, making it easy to launch both your backend and mobile app at once without complex dev-time config.<\/p>\n<h3>YARP Static Files Support<\/h3>\n<p>Aspire 9.5 adds <strong>static file serving capabilities<\/strong> to the <a href=\"https:\/\/learn.microsoft.com\/aspnet\/core\/fundamentals\/servers\/yarp\/yarp-overview\">YARP<\/a> integration, enabling direct static file serving from YARP so your app can deliver HTML, CSS, JavaScript, and other assets efficiently. You can choose flexible source options, such as bind mounting local directories or utilizing Docker multi-stage builds, to suit your workflow. The static file support works reliably in both development and production environments, streamlining deployment and day-to-day operations.<\/p>\n<p>The following example demonstrates how YARP can be configured to serve static files from a frontend \u2018dist\u2019 directory while also proxying API requests to a backend service. This approach streamlines resource management and routing within distributed applications.<\/p>\n<p>var backendApi = builder.AddProject&lt;Projects.Api&gt;(&#8220;api&#8221;);<\/p>\n<p>\/\/ YARP serves static files AND proxies API requests<br \/>\nvar gateway = builder.AddYarp(&#8220;app-gateway&#8221;)<br \/>\n    .WithStaticFiles(&#8220;.\/frontend\/dist&#8221;)<br \/>\n    .WithConfiguration(yarp =&gt;<br \/>\n    {<br \/>\n        \/\/ API routes<br \/>\n        yarp.AddRoute(&#8220;\/api\/{**catch-all}&#8221;, backendApi)<br \/>\n            .WithTransformPathRemovePrefix(&#8220;\/api&#8221;);<\/p>\n<p>        \/\/ Static files are served for all other routes<br \/>\n    });<\/p>\n<h2>Cross-Process Call Stacks in Visual Studio 2026<\/h2>\n<p class=\"x_MsoNormal\">You might have heard that the Visual Studio team <a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/visual-studio-2026-insiders-is-here\/\">officially released the first previews of Visual Studio 2026<\/a>. Visual Studio\u2019s Call Stack Window can now extend Aspire apps to show call stack frames from other debugged processes running on Windows. This feature is a game-changer for deep-dive diagnostics on distributed systems. Issues are found faster by reconstructing the full logical call path, even when the request hops between services. With deeper visibility into async operations, developers can debug smarter, not harder. Currently available only on Windows and Visual Studio 2026 Insiders.<\/p>\n<h2>Get Started Now<\/h2>\n<p>Ready to try Aspire 9.5? Install the new CLI and try the aspire update command on your projects, then let us know what you think!<\/p>\n<p><strong>GitHub<\/strong>: Collaborate with the team on <a href=\"https:\/\/github.com\/dotnet\/aspire\">GitHub<\/a><br \/>\n<strong>Discord<\/strong>: Join the community on <a href=\"https:\/\/aka.ms\/aspire-discord\">Discord<\/a> to chat with the team and other developers<br \/>\n<strong>Documentation<\/strong>: Explore the comprehensive <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/\">documentation<\/a> for detailed guides and tutorials.<\/p>\n<p>For the complete list of changes and technical details, visit the <a href=\"https:\/\/learn.microsoft.com\/dotnet\/aspire\/whats-new\/dotnet-aspire-9-5\">official Aspire 9.5 release notes<\/a>.<\/p>\n<p>The post <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-dotnet-aspire-95\/\">Announcing Aspire 9.5<\/a> appeared first on <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\">.NET Blog<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Aspire 9.5 is here with exciting new features and improvements that enhance the developer experience for building distributed applications. For [&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-2524","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\/2524","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=2524"}],"version-history":[{"count":0,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/2524\/revisions"}],"wp:attachment":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media?parent=2524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/categories?post=2524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/tags?post=2524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}