1. 云原生时代的架构演进与Aspire 的定位
1.1 分布式应用开发的复杂性危机
在现代云原生应用开发的图景中,分布式系统的构建长期以来一直面临着极为陡峭的学习曲线和认知负载。传统的微服务架构虽然在扩展性和团队解耦方面提供了显著优势,但也引入了巨大的运维复杂性。开发者不仅需要编写业务逻辑,还需要在本地环境中手动编排成各种依赖服务(如数据库、消息队列、缓存),管理繁琐的连接字符串,并处理服务间的发现与通信机制。
Azure Functions 作为 Azure 平台上最成熟的无服务(Serverless)计算服务,长期以来一直是事件驱动架构的核心组件。然而,在 Aspire 出现之前,Azure Functions 的开发往往是孤立的。开发者通常需要独立启动 Functions Host,手动配置 local.settings.json 以连接到本地模拟器或云端资源,并且很难在本地通过单一的调试会话同时启动 Web API、前端应用和后台 Function 处理程序。这种割裂的开发体验(Inner Loop)导致了开发效率的低下,以及“在我的机器上能运行”但在云端因配置漂移而失败的经典问题。
1.2 Aspire 的介入与核心哲学
Aspire 的出现并非仅仅是一个新的类库或框架,它代表了微软在构建云原生分布式应用方面的一种“固执己见”(Opinionated)的全新应用模型。Aspire 的核心愿景是通过标准化的方式来处理服务编排、依赖注入、健康检查、可观测性(Observability)和服务发现。
在 Aspire 的体系中,Azure Functions 不再是一个游离在主应用之外的脚本集合,而是被提升为“一等公民”的资源类型。通过 Aspire.Hosting.Azure.Functions 包,Azure Functions 项目可以被定义为 AppHost 中的一个节点,与其他容器化服务(如 Redis、PostgreSQL)或可执行文件(如 ASP.NET Core API)并列。这种集成从根本上改变了 Azure Functions 的生命周期管理:现在,整个分布式系统的拓扑结构——包括 Function App 及其依赖的 Storage Blob、Service Bus Queue——都以 C# 代码的形式在 AppHost 中显式定义,并在启动时自动编排 1。
1.3 现代化的先决条件:隔离工作进程模型
要理解 Aspire 与 Azure Functions 的集成,必须首先明确其运行时的基础要求。Aspire 强制要求 Azure Functions 项目采用 隔离工作进程模型(Isolated Worker Model)。这是对传统进程内(In-Process)模型的一次重大背离,但也是现代化的必然选择。
在隔离模型中,Function 代码运行在一个独立的.NET 进程中,与 Azure Functions Host 运行时进程分离。这种架构解耦使得开发者可以完全控制应用程序的启动过程(Startup),包括依赖注入容器的配置和中间件管道的构建。这对于 Aspire 至关重要,因为 Aspire 依赖于在启动时注入特定的服务发现逻辑、OpenTelemetry 配置以及健康检查端点。如果继续使用进程内模型,Aspire 将无法有效地“钩入”Function 的生命周期来实施其编排逻辑。因此,集成的前提是必须通过 NuGet 包 Microsoft.Azure.Functions.Worker 来构建项目,并明确目标框架为.NET 8.0 或更高版本,配合.NET 9 SDK 使用 3。
2. 架构基础与资源编排模型
2.1 AppHost:基础设施即代码的 C# 表达
在 Aspire 解决方案中,AppHost 项目扮演着“指挥官”的角色。它不包含任何业务逻辑,而是专注于描述系统的静态结构和动态关系。对于 Azure Functions 而言,这意味着开发者不再需要编写 YAML 文件或复杂的脚本来启动本地环境,而是使用强类型的 C# API。
2.1.1 AddAzureFunctionsProject 的特殊性
在将标准 Web 项目添加到 Aspire 时,通常使用 AddProject<T> 方法。然而,Azure Functions 有其特殊的启动要求——它需要由 Azure Functions Core Tools(即 func CLI)或特定的运行时宿主来加载,而不是直接作为普通的可执行文件运行。
因此,Aspire 引入了专用的扩展方法 AddAzureFunctionsProject<TProject>。这个方法不仅注册了项目元数据,还封装了启动 Functions Host 所需的复杂参数。例如,它会自动处理端口绑定、环境变量的透传以及与 Aspire Dashboard 的通信管道 1。
/* by 01130.hk - online tools website : 01130.hk/zh/barcode.html */
var builder = DistributedApplication.CreateBuilder(args);
// 定义一个 Azure Functions 资源,命名为 "data-processor"
var functionApp = builder.AddAzureFunctionsProject\<Projects.DataProcessor\>("data-processor")
.WithExternalHttpEndpoints(); // 显式暴露 HTTP 端点
这段简洁的代码背后隐藏了巨大的复杂性封装:Aspire 会自动检测项目路径,确定运行时版本,并在后台协调 func start 命令的执行,同时将其标准输出流重定向到 Aspire Dashboard 中。
2.2 资源依赖与连接字符串的消亡
在传统的 Azure Functions 开发中,连接 Azure Storage 或 Service Bus 是一个手动的过程。开发者需要在 Azure 门户创建资源,复制连接字符串,粘贴到 local.settings.json,并小心翼翼地确保不将凭据提交到代码仓库。
Aspire 通过“引用即连接”(Reference-based Connection)的范式彻底改变了这一点。在 AppHost 中,资源之间的关系通过 .WithReference() 方法建立。
架构设计模式:
- 定义基础设施资源: 首先在 AppHost 中定义所需的 Azure 资源,如存储账户。
- 细化子资源: 在存储账户下定义具体的 Blob 容器或队列。
- 建立关联: 将这些子资源对象直接传递给 Function 资源。
// 定义存储资源,并在本地以模拟器(Azurite)模式运行
/* by 01130.hk - online tools website : 01130.hk/zh/barcode.html */
var storage = builder.AddAzureStorage("storage").RunAsEmulator();
var ordersQueue = storage.AddQueues("orders");
// 将队列资源注入到 Function App 中
builder.AddAzureFunctionsProject<Projects.OrderHandler>("order-handler")
.WithReference(ordersQueue);
在这种模式下,Aspire 运行时负责生成正确的连接字符串。如果在开发环境(RunAsEmulator()),它会生成指向本地 Docker 容器中 Azurite 实例的连接字符串(如 UseDevelopmentStorage=true)。如果在生产环境,它则会配置基于托管身份(Managed Identity)的连接信息。这种抽象使得代码在不同环境间具有极高的可移植性,彻底消除了“硬编码连接字符串”的陋习 5。
2.3 关键实现细节:连接名称的严格对齐
虽然 Aspire 简化了连接过程,但在具体实现细节上有着严格的约定。研究表明,开发者最常遇到的陷阱是 AppHost 中定义的资源名称与 Function 代码中触发器属性的连接名称不匹配。
根据 5 的研究片段,如果 AppHost 中定义的队列资源变量名为 ordersQueue,但资源逻辑名称(传入 AddQueues 的字符串)是 "orders",那么 Aspire 注入到环境变量中的连接字符串键名通常遵循 ConnectionStrings__orders 的格式。
在 Function 的代码中,QueueTrigger 属性必须精确引用这个逻辑名称:
// 正确的绑定方式
[Function("ProcessOrder")]
public void Run( string myQueueItem)
{
//...
}
注意 Connection = "orders" 必须与 storage.AddQueues("orders") 中的名称完全一致。如果这里写成了 "storage" 或其他名称,Functions Host 将无法在启动时找到对应的环境变量,从而导致运行时错误。这要求架构师在设计系统时,必须在基础设施定义层(AppHost)和应用代码层(Function Project)之间建立严格的命名规范 5。
3. 核心集成机制与开发内循环(Inner Loop)
3.1 统一的控制台与仪表板(Dashboard)
Aspire 最具变革性的功能之一是其统一的仪表板。当启动 AppHost 时,会同时启动一个 Web 界面,展示所有编排资源的实时状态。对于 Azure Functions,这意味着开发者不再需要盯着黑色的命令行窗口寻找日志。
Aspire Dashboard 聚合了以下关键信息:
- 资源状态: Function App 是否已启动,分配的端口是什么。
- 控制台日志: 实时流式传输 Functions Host 的 stdout/stderr,支持搜索和过滤。
- 结构化日志: 基于 OpenTelemetry 的日志条目,允许查看具体的日志级别和属性。
- 分布式追踪: 展示从 API 网关到 Function 再到数据库的完整调用链路图。
这种可视化的调试体验极大地缩短了排错时间。开发者可以直接在仪表板中看到环境变量的值,确认 Aspire 是否正确注入了 ConnectionStrings__orders,从而快速验证配置是否生效 6。
3.2 模拟器与云资源的无缝切换
Aspire 允许开发者在“完全本地仿真”和“混合云模式”之间灵活切换。
- 仿真模式(Emulator Mode): 默认情况下,使用 AddAzureStorage("name").RunAsEmulator() 会启动 Azurite 容器。这对于离线开发和降低成本非常有益。
- 混合模式(Hybrid Mode): 在某些复杂场景下,本地仿真器可能无法完全模拟云端行为(例如 Event Grid 的特定行为或大规模并发测试)。此时,开发者只需移除 .RunAsEmulator() 调用,并通过 azd 或手动配置 dotnet user-secrets 提供真实的 Azure 资源连接信息。Aspire 会自动将这些云端连接注入到本地运行的 Function 中,实现本地代码操作云端资源的能力 7。
3.3 本地开发中的 HTTPS 挑战与网络配置
尽管 Aspire 提供了强大的编排能力,但在本地开发 Azure Functions 时,HTTPS 支持仍然是一个显著的痛点。根据 8 和 9 的反馈,AddAzureFunctionsProject 默认以 HTTP 协议启动 Functions Host。
这在大多数内部服务通信场景下是可以接受的,但在以下场景中会成为阻塞性问题:
- Webhook 开发: 许多第三方服务(如 Stripe、GitHub)或 Azure 服务(如 Event Grid)要求 Webhook 端点必须是 HTTPS。
- 安全性合规: 某些企业策略要求所有本地通信也必须加密。
- 移动端调试: 某些移动端应用框架拒绝连接非 HTTPS 的后端。
目前的解决方案通常涉及较为复杂的配置绕过:
- 方案 A:修改启动参数。 在 AppHost 中使用 .WithArgs() 强制传入 --useHttps 参数给 Functions Core Tools,并配合 .WithArgs("--port", "xxxx") 指定端口。
- 方案 B:反向代理。 在 Aspire 中配置一个轻量级的反向代理(如 YARP),该代理提供 HTTPS 前端,并将流量转发给后台运行在 HTTP 上的 Function。
这反映了当前集成方案仍在快速演进中,某些边缘场景的开发者体验尚未达到开箱即用的完美状态。
3.4 端口冲突与多实例管理
在微服务架构中,可能存在多个不同的 Function Apps(例如一个负责订单处理,一个负责库存管理)。如果在 Aspire 中简单地多次调用 AddAzureFunctionsProject,可能会遇到端口冲突,因为 Functions Core Tools 默认通过 7071 端口启动。
解决这一问题的最佳实践是显式分配端口:
builder.AddAzureFunctionsProject<Projects.OrderFunc>("orders")
.WithArgs("--port", "7071");
builder.AddAzureFunctionsProject<Projects.InventoryFunc>("inventory")
.WithArgs("--port", "7072");
通过这种方式,Aspire 可以同时管理多个 Function 实例,并在服务发现层正确注册它们各自的端口,确保系统内部的 HTTP 调用能够准确路由到目标实例 10。
4. 服务发现与通信模式
4.1 服务发现的工作原理
在 Aspire 中,服务发现是基于环境变量和 DNS 命名的组合实现的。当我们在 AppHost 中定义资源 builder.AddAzureFunctionsProject(..., "my-func") 时,"my-func" 就成为了该服务在逻辑网络中的主机名。
对于调用方(例如一个 ASP.NET Core Web API),Aspire 会注入遵循特定格式的环境变量,如 services__my-func__http__0,其值为 http://localhost:7071(在开发时)或实际的容器服务地址(在生产时)。
4.2 使用 IHttpClientFactory 进行调用
要从其他服务调用 Azure Function(假设是 HTTP 触发器),Aspire 利用了.NET 强大的依赖注入系统。
- 添加引用: 调用方项目必须在 AppHost 中引用 Function 项目:.WithReference(functionApp).
- 配置客户端: 在调用方代码(Program.cs)中,Aspire 的服务发现库会自动拦截 HttpClient 的请求。
- 发起调用:
// 在 API 服务中
public class OrderService(IHttpClientFactory httpClientFactory)
{
public async Task TriggerFunction()
{
// 使用逻辑名称 "my-func" 创建客户端
var client = httpClientFactory.CreateClient("my-func");
// 实际请求会路由到 http://localhost:7071/api/process
await client.PostAsync("/api/process", content);
}
}
这种机制完全屏蔽了底层的 IP 地址和端口变化,使得代码在本地开发、Docker Compose 环境以及 Kubernetes/Azure Container Apps 之间迁移时无需修改任何一行网络相关的代码 1。
5. 可观测性与监控(Observability)
5.1 OpenTelemetry 的全面接管
.NET Aspire 彻底拥抱了 OpenTelemetry (OTel) 标准,这也深刻影响了 Azure Functions 的监控方式。传统上,Azure Functions 强依赖于 Application Insights SDK。但在 Aspire 架构下,建议避免在 Function 项目中直接引用 App Insights SDK,而是依赖 Aspire 的 ServiceDefaults 项目进行统一配置。
在 FunctionsApplication.CreateBuilder(args) 之后调用 builder.AddServiceDefaults(),会自动注册 OTel 的 MeterProvider(指标)、TracerProvider(链路追踪)和 LoggerProvider(日志)。这些遥测数据通过 OTLP (OpenTelemetry Protocol) 协议发送到 Aspire Dashboard 或外部收集器。
5.2 分布式链路追踪的连通性
这种架构的最大价值在于上下文传播(Context Propagation)。当一个 Web API 发起 HTTP 请求调用 Azure Function 时,Aspire 配置的 HttpClient 会自动注入 W3C TraceContext 头(traceparent)。Functions Host 接收到请求后,会提取这个上下文,并生成一个属于同一 Trace ID 的子 Span。
结果是,在 Aspire Dashboard 的 Trace 视图中,开发者可以看到一条完整的瀑布图:
- 用户请求到达 Web API (20ms)
- Web API 处理逻辑 (5ms)
- Web API 调用 Azure Function (HTTP Post)
- Azure Function 触发执行 (150ms)
- Function 读取 Redis 缓存 (2ms)
- Function 写入 SQL 数据库 (10ms)
这种端到端的可见性对于排查微服务架构中的性能瓶颈(如冷启动延迟、数据库锁争用)具有不可估量的价值 1。
6. 部署范式与基础设施即代码(IaC)
在将 Aspire 编排的 Azure Functions 部署到 Azure 云端时,存在三种主要的托管选项。每种选项都对应着不同的运维模型和成本结构。
6.1 选项一:Azure Container Apps (ACA) —— 默认与推荐
Aspire 的“原生”部署目标是 Azure Container Apps。在这种模式下,Azure Function 被打包成一个标准的 Docker 容器。
- 工作原理: azd (Azure Developer CLI) 会调用 dotnet publish 生成容器镜像,并将其推送到 Azure Container Registry (ACR)。然后,ACA 环境会拉取该镜像并运行。
- KEDA 集成: ACA 内置了 KEDA (Kubernetes Event-driven Autoscaling)。对于 Queue、Service Bus 等触发器,ACA 会自动配置 KEDA 缩放规则。这意味着如果有大量消息积压,ACA 会自动增加 Function 容器的副本数;如果队列为空,副本数可缩减为零。
- 优势: 环境一致性极高(本地也是容器化运行),并且可以与同一环境中的其他微服务共享网络和 Dapr 组件。
- 限制: 目前对于某些特定的触发器类型,KEDA 的自动配置可能需要手动调整 Bicep 模板才能完美工作 14。
6.2 选项二:Azure App Service (Linux) —— 传统与稳健
对于尚未准备好全面拥抱容器化或 KEDA 的团队,Aspire 提供了对 Azure App Service 的预览支持。
- 配置方法: 必须在 AppHost 中引入 Aspire.Hosting.Azure.AppService 包,并显式配置发布目标:
builder.AddAzureFunctionsProject<Projects.MyFunc>("func")
.PublishAsAzureAppServiceWebsite((infra, app) =>
{
app.Kind \= "functionapp,linux"; // 关键配置:指定资源类型
});
- 优势: 可以利用 App Service 丰富的功能,如部署槽(Deployment Slots)、应用服务认证(Easy Auth)以及预热实例(Always On)。
- 适用场景: 适合需要稳定、可预测成本(使用 Premium Plan)以及对冷启动极其敏感的企业级应用 1。
6.3 选项三:Flex Consumption Plan —— 现代无服务器
Flex Consumption 是 Azure Functions 最新的托管计划,结合了 Consumption 计划的低成本和 Dedicated 计划的高性能(如 VNet 集成)。
- 部署复杂性: Aspire 目前对 Flex Consumption 的支持主要通过 azd 的基础设施生成层(Infrastructure Generation)来实现。由于这是一个较新的计划,开发者往往需要通过 azd infra synth 命令生成 Bicep 文件,然后手动修改 resources.bicep 中的 functionApp 定义,将其 SKU 设置为 FlexConsumption,并配置特定的存储容器用于存放代码包。
- 网络要求: Flex Consumption 强调网络隔离。在 Bicep 中,可能需要额外配置子网委托(Subnet Delegation)以允许 Function 访问受防火墙保护的存储或数据库资源 16。
6.4 azd 与 Bicep 的生成机制
Aspire 的部署魔力主要由 azd 工具驱动。理解其内部机制对于高级运维至关重要:
- 模型分析: azd 启动 AppHost,读取资源图谱。
- Bicep 转译: 它将 C# 定义的资源(如 AddAzureStorage)转换为 Azure Bicep 模块。
- 基础设施置备: 使用 Azure Resource Manager (ARM) API 创建资源组、存储账户、托管环境等。
- 代码部署: 将编译后的二进制文件或 Docker 镜像推送到对应的 Azure 资源。
对于高级用户,可以通过 .ConfigureInfrastructure() 方法在 C# 代码中直接修改生成的 Bicep 属性,例如修改存储账户的 SKU 为 GRS(异地冗余),或者给资源添加特定的 Tag 18。
7. 高级集成场景与挑战
7.1 混合环境下的连接策略
在企业迁移过程中,往往存在“混合”需求:新开发的 Function 在本地运行,但需要连接到旧有的、已经存在于 Azure 上的 SQL Database 或 Service Bus。
Aspire 支持通过 .WithEnvironment() 注入现有的连接字符串,或者更优雅地,使用 .AddConnectionString() 方法从 User Secrets 中读取配置。
// AppHost/Program.cs
var sql = builder.ExecutionContext.IsPublishMode
? builder.AddSqlServer("sql") // 生产环境:创建新库或引用云资源
: builder.AddConnectionString("sql-conn"); // 开发环境:使用现有连接
这种模式允许开发团队在不重新创建庞大数据库的情况下,利用 Aspire 开发新的计算逻辑 7。
7.2 依赖包版本兼容性地狱
研究片段 20 和 21 揭示了一个不可忽视的工程挑战:版本兼容性。由于 Aspire 及其 Azure Functions 集成包(尤其是预览版)迭代速度极快,经常出现 Aspire.Hosting.Azure.Functions 与 Microsoft.Azure.Functions.Worker.Sdk 版本不匹配导致的项目无法启动或构建失败。
最佳实践:
- 版本锁定: 团队应在 Directory.Packages.props 或 csproj 中严格锁定所有 Aspire 相关包的版本号,避免使用浮动版本(如 *-*)。
- 同步升级: 升级 Aspire Core 组件时,必须同时检查并升级 Azure Functions 的相关扩展包,确保它们属于同一发布波次(Release Wave)。
7.3 IDE 支持的差异
虽然 Visual Studio 2022 对 Aspire 提供了近乎完美的支持,但 JetBrains Rider 用户在特定版本(如 2025.2)中报告了 Function App 无法在 Aspire 编排下启动的回归 Bug。这通常是因为 IDE 的运行配置插件未能正确解析 Aspire 传递给 Functions Host 的启动参数。对于非 VS 用户,回退到命令行使用 dotnet run 启动 AppHost 是目前最可靠的临时方案 21。
8. 总结与展望
.NET Aspire 与 Azure Functions 的集成,标志着微软在云原生开发领域的一次重要战略整合。它通过消除底层的配置噪音,让开发者能够专注于业务逻辑和系统拓扑的设计。
核心价值总结:
- 架构可视化与代码化: 将分布式系统的架构图直接转化为可执行的 C# 代码,保证了文档与实现的实时同步。
- 内循环的革命: 统一的 Dashboard 和日志视图,使得调试跨服务(API -> Function -> DB)的复杂交互变得如同调试单体应用一样简单。
- 云原生最佳实践的落地: 强制隔离模型、默认 OpenTelemetry、无凭据连接(Managed Identity),Aspire 实际上是在强制推行一套经过验证的云架构标准。
尽管目前在 HTTPS 支持、Flex Consumption 部署以及非 VS IDE 支持方面仍存在由于预览阶段带来的粗糙感,但对于任何准备基于.NET 9 构建新一代云应用的团队来说,采用 Aspire 编排 Azure Functions 已经不再是一个选项,而是一个能够显著提升工程效率和系统质量的必然选择。
附录:数据与配置参考表
表 1:Azure Functions 托管模型在 Aspire 中的对比
| 特性 | Azure Container Apps (ACA) | Azure App Service (Linux) | Flex Consumption (Preview) |
|---|---|---|---|
| Aspire 支持级别 | 原生/默认 | 预览集成 (需额外包) | 仅 via azd/Bicep |
| 底层技术 | Kubernetes + KEDA | App Service Plan | 容器化无服务器架构 |
| 扩缩容机制 | KEDA (事件驱动,精细控制) | CPU/内存 或 预热实例 | 快速事件驱动,毫秒级冷启动 |
| 网络隔离 | 强 (Envoy Proxy, 内部 VNet) | 强 (VNet 集成, 私有端点) | 强 (VNet 注入) |
| 部署制品 | Docker 镜像 (OCI) | Zip 包 或 Docker 镜像 | Zip 包 (远程构建) |
| 适用场景 | 统一微服务平台,需细粒度扩展配置 | 需利用 Deployment Slots 等传统 Web 功能 | 纯 Serverless,需极致弹性与网络访问 |
表 2:常见触发器与 Aspire 资源的绑定对应关系
| 触发器类型 | Aspire 资源定义 (AppHost) | Function 属性配置 | 注意事项 |
|---|---|---|---|
| QueueTrigger | storage.AddQueues("my-queue") | Connection = "my-queue" | 属性名必须匹配资源名,而非队列实体名 |
| BlobTrigger | storage.AddBlobs("my-blob") | Connection = "my-blob" | 需确保 Storage 模拟器正常运行 |
| ServiceBusTrigger | builder.AddAzureServiceBus("sb") | Connection = "sb" | 模拟器支持尚不完善,推荐混合模式 |
| CosmosDBTrigger | builder.AddAzureCosmosDB("cosmos") | Connection = "cosmos" | 需配置 Lease Container |
| HttpTrigger | WithExternalHttpEndpoints() | 隐式绑定,无需 Connection 属性 | 需关注 HTTPS 配置及端口冲突 |
引用的著作
- Guide for Using Azure Functions with Aspire | Microsoft Learn, 访问时间为 十二月 19, 2025, https://learn.microsoft.com/en-us/azure/azure-functions/dotnet-aspire-integration
- Guide for Using Azure Functions with Aspire, 访问时间为 十二月 19, 2025, https://docs.azure.cn/en-us/azure-functions/dotnet-aspire-integration
- Azure Functions integration | Aspire, 访问时间为 十二月 19, 2025, https://aspire.dev/integrations/cloud/azure/azure-functions/
- AzureFunctionsProjectResource, 访问时间为 十二月 19, 2025, https://learn.microsoft.com/en-us/dotnet/api/aspire.hosting.azurefunctionsprojectresourceextensions.addazurefunctionsproject?view=dotnet-aspire-13.0
- captainsafia/AspireAzureFunctionsSample: A sample ... - GitHub, 访问时间为 十二月 19, 2025, https://github.com/captainsafia/AspireAzureFunctionsSample
- Better Together: .NET Aspire, Azure Functions, and Visual Studio - Microsoft for Developers, 访问时间为 十二月 19, 2025, https://developer.microsoft.com/blog/net-aspire-and-azure-functions-integration-preview
- Is it possible to connect an Aspire function app to an already existing azurite docker container instead of using RunAsEmulator? - Stack Overflow, 访问时间为 十二月 19, 2025, https://stackoverflow.com/questions/79630776/is-it-possible-to-connect-an-aspire-function-app-to-an-already-existing-azurite
- AddAzureFunctionsProject always running http instead of https · Issue #7150 · dotnet/aspire, 访问时间为 十二月 19, 2025, https://github.com/dotnet/aspire/issues/7150
- [WebToolsE2E][Aspire] Running aspire project with azure functions and navigating to the /publish/blob endpoint in the ApiService, an error occurs in Console logs: System.InvalidOperationException: A BlobServiceClient could not be configured. · Issue #7501 - GitHub, 访问时间为 十二月 19, 2025, https://github.com/dotnet/aspire/issues/7501
- Multiple Azure Functions in Aspire with same code but different settings - Stack Overflow, 访问时间为 十二月 19, 2025, https://stackoverflow.com/questions/79657776/multiple-azure-functions-in-aspire-with-same-code-but-different-settings
- Microsoft.Extensions.ServiceDiscovery 10.0.0 - NuGet, 访问时间为 十二月 19, 2025, https://www.nuget.org/packages/Microsoft.Extensions.ServiceDiscovery
- Make HTTP requests using IHttpClientFactory in ASP.NET Core | Microsoft Learn, 访问时间为 十二月 19, 2025, https://learn.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-10.0
- The Smarter Way To Develop Azure Functions Locally - YouTube, 访问时间为 十二月 19, 2025, https://www.youtube.com/watch?v=d7yoIvx0J0s
- Azure Functions on Azure Container Apps overview - Microsoft Learn, 访问时间为 十二月 19, 2025, https://learn.microsoft.com/en-us/azure/container-apps/functions-overview
- Comparing Container Apps with other Azure container options - Microsoft Learn, 访问时间为 十二月 19, 2025, https://learn.microsoft.com/en-us/azure/container-apps/compare-options
- Azure Functions Flex Consumption plan hosting - Microsoft Learn, 访问时间为 十二月 19, 2025, https://learn.microsoft.com/en-us/azure/azure-functions/flex-consumption-plan
- Migrate Consumption plan apps to Flex Consumption in Azure Functions | Microsoft Learn, 访问时间为 十二月 19, 2025, https://learn.microsoft.com/en-us/azure/azure-functions/migration/migrate-plan-consumption-to-flex
- Customize Aspire Azure deployments - Microsoft Learn, 访问时间为 十二月 19, 2025, https://learn.microsoft.com/en-us/dotnet/aspire/deployment/azd/customize-deployments
- Customize Azure resources | Aspire, 访问时间为 十二月 19, 2025, https://aspire.dev/integrations/cloud/azure/customize-resources/
- `aspire run` fails for Azure Functions due to CS8802 · Issue #13205 - GitHub, 访问时间为 十二月 19, 2025, https://github.com/dotnet/aspire/issues/13205
- Aspire project with Azure Functions fails to start in Rider 2025.2 (works in 2025.1), 访问时间为 十二月 19, 2025, https://youtrack.jetbrains.com/projects/RIDER/issues/RIDER-129008/Aspire-project-with-Azure-Functions-fails-to-start-in-Rider-2025.2-works-in-2025.1
欢迎大家扫描下面二维码成为我的客户,扶你上云
11万+

被折叠的 条评论
为什么被折叠?



