9 月 29 日,微软发布了 Aspire 13.6。这次更新没有那种惊天动地的大特性,但好几处改动都挠在了日常开发的痒处——尤其是仪表盘,终于不再是"关了就什么都没了"。
仪表盘有了记忆
以前用 Aspire 仪表盘,应用一停,遥测数据、日志、链路追踪全部清零。13.6 把资源快照和遥测数据落到了本地 SQLite 里,AppHost 启动时默认开启 Run persistence,最多保留最近 10 次运行记录,跑完的历史记录是只读的,方便回头翻。
有个细节要留意:这个数据库没有加密、没有授权层,Windows 上也不会自动设 ACL。数据目录里有什么,自己心里有数就好。
顺带一提,控制台日志、结构化日志和 Trace 的默认上限都提到了 10 万条,仪表盘本体也改成了 Native AOT 发布,UI 框架迁到了 Fluent UI Blazor v5。
终端和数据库 REPL,直接嵌进仪表盘
AppHost 现在可以通过实验性的 TerminalService API,在仪表盘的停靠栏里开自己的终端。更实用的是 WithRepl——PostgreSQL、MySQL、MongoDB、SQL Server、Redis、Valkey 这些资源,一键就能在仪表盘里打开容器内自带的客户端。
不过要清醒一点:这些 REPL 用的是真实凭据,而且不是只读的。所以默认是关的,想用就得显式打开,别在不该开的环境里开。
Java 和 Rust 成了"一等公民"(预发布)
这次最出圈的变化,是两个第一方托管集成包:
Aspire.Hosting.Java:支持可执行 JAR、Maven/Gradle Wrapper,Spring Boot 和 Quarkus 都在覆盖范围内;
Aspire.Hosting.Rust:一个
AddRustApp就能把 Cargo 应用挂进来:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRustApp("api","../rust-api")
.WithHttpEndpoint(env:"PORT")
.WithExternalHttpEndpoints();
builder.Build().Run();
两个包都还是预发布状态,而且官方明说,这是在 Aspire Community Toolkit 已有工作的基础上做的——社区探路、官方收编,这条路走得挺顺。
另外新增了两个 Azure 相关的预览集成:Azure Connector 命名空间和 Azure Container Apps 沙箱。想用?得先有 Azure 订阅的预览访问权限。
开发体验上的一堆"小修补"
AddDotnetProject会把兼容的项目放进共享的还原/构建组,不再重复 restore;项目和可执行文件的卷挂载新增
env参数,本地和部署后读同一个环境变量拿数据路径,不用两边各写一套;TypeScript AppHost 会从自己所在目录加载
appsettings.json,而且 Deno 2+ 也能跑 TS AppHost 了;CLI 的
aspire run/aspire start加了--launch-profile;aspire new/aspire init的智能体设置里,Aspire MCP 服务器默认不勾选了,要用 MCP 得手动开;VS Code 扩展更向编码智能体敞开了:可以启动、停止 AppHost,Aspire 面板里直接多了部署和发布操作。
升级前必看:破坏性变更
几个会咬人的点:
MongoDB 本地默认走 TLS 了(有证书可用时),之前的明文默认被取消;
Cosmos DB 模拟器默认换成基于 Linux 的 vNext 镜像,老的经典模拟器数据不会保留——有存量数据的先备份;
Azure Front Door 的源名称会变;
带连字符的连接名会拿到一个可移植的环境变量别名,部分部署目标会自动生成它。
其余零碎的更新还有:Azure Container Apps Express 环境、Microsoft Foundry Toolboxes、MongoDB 副本集、Blazor WebAssembly 调试支持,以及——GitHub Models 集成被移除了。
写在最后
13.6 这个版本的味道很清楚:一边把仪表盘从"一次性工具"往"可回溯的开发工作台"推,一边把 Aspire 的边界往 .NET 之外扩。Java 和 Rust 的第一方支持虽然现在还是预览,但信号已经很明显了——Aspire 想做的是整个分布式应用的编排层,而不只是 .NET 的开发伴侣。
完整功能清单和迁移说明在官方文档的 "Aspire 13.6 新增功能" 页面,动手升级前建议先过一遍。

