You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM模板部署C# Azure Function后未显示的配置问题咨询

排查预编译C# Azure Function部署后不显示的问题

首先要明确:预编译C#函数(编译为.dll的那种,不是.csx脚本)的代码部署和ARM模板是完全分离的——ARM模板只负责创建Function App的基础设施(比如应用服务计划、存储账户、Function App实例本身),而函数代码需要通过单独的部署流程(比如Octopus的App Service部署步骤)来推送,ARM模板里不需要额外配置函数代码的内容(这也是为什么不推荐用ARM部署csx脚本的原因,预编译函数走常规的代码部署流程更规范)。

接下来我们从ARM模板配置、Octopus部署步骤两个方向排查:

一、检查ARM模板的关键配置

看你提供的模板片段,有几个点需要确认:

1. 运行时版本与扩展版本

  • 你的FUNCTIONS_EXTENSION_VERSION设置为~2,这个版本非常老旧(对应.NET Core 2.x),如果你的C#函数是基于.NET 6/7/8开发的,这个版本完全不兼容,会导致函数无法加载。建议升级到~4(适配.NET 6+ in-process/isolated)或者~3(适配.NET Core 3.1)。
  • 确认FUNCTIONS_WORKER_RUNTIME的runtimeStack参数值正确:
    • 如果你用的是in-process模型的函数,值应为dotnet
    • 如果你用的是isolated进程模型,值应为dotnet-isolated

2. 存储相关配置

你配置了WEBSITE_CONTENTAZUREFILECONNECTIONSTRING和WEBSITE_CONTENTSHARE,这两个设置主要针对消耗计划(Consumption Plan)的Function App,用来挂载Azure Files存储函数代码。如果你的Function App使用的是App Service Plan(比如Basic/Standard等),这两个配置不是必须的,甚至可能导致代码部署路径异常。可以尝试移除这两个设置,重新部署ARM模板后再推送函数代码。

修正后的模板片段示例(调整版本和存储配置):

{
  "type": "Microsoft.Web/sites",
  "apiVersion": "2022-09-01", // 建议使用较新的API版本
  "name": "[parameters('sites_..._name')]",
  "location": "[parameters('location')]",
  "kind": "functionapp",
  "dependsOn": [
    "[resourceId('Microsoft.Web/serverfarms', parameters('serverfarms_..._name'))]",
    "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
  ],
  "identity": { "type": "SystemAssigned" },
  "properties": {
    "enabled": true,
    "siteConfig": {
      "appSettings": [
        {
          "name": "FUNCTIONS_WORKER_RUNTIME",
          "value": "dotnet" // 明确设置为dotnet,替换原来的runtimeStack参数(确保参数值正确)
        },
        {
          "name": "AzureWebJobsStorage",
          "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',variables('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2021-09-01').keys[0].value)]"
        },
        {
          "name": "FUNCTIONS_EXTENSION_VERSION",
          "value": "~4" // 升级到最新稳定扩展版本
        },
        // 移除WEBSITE_CONTENTAZUREFILECONNECTIONSTRING和WEBSITE_CONTENTSHARE(如果用App Service Plan)
        // ...其他配置
      ]
    },
    // ...其他属性
    "httpsOnly": true,
    "redundancyMode": "None"
  }
}

二、排查Octopus Deploy的部署步骤

你提到“通过单独步骤(使用模板)完成部署”——这里可能存在误区:ARM模板步骤只能部署基础设施,不能部署函数代码。你需要用Octopus的专门部署步骤:

  1. 确保你使用的是Deploy Azure App Service步骤,而不是ARM模板部署步骤。
  2. 该步骤的部署包应该是你C#函数项目编译后的发布包:
    • 可以通过dotnet publish命令生成,路径一般是bin/Release/net6.0/publish(根据你的.NET版本调整)
    • 发布包应该包含host.json、local.settings.json(可选)、bin目录,以及每个函数对应的文件夹(比如HttpTrigger1)
  3. 检查Octopus的部署日志,看是否有报错:比如“部署成功但函数未加载”可能是因为运行时不兼容,或者代码包结构错误。

三、手动验证排除问题

为了排除Octopus的问题,你可以手动将发布包上传到Azure Portal的Function App:

  1. 进入Function App的“部署中心”,选择“高级工具”(Kudu)
  2. 进入“Debug console” → “CMD”,导航到site/wwwroot目录
  3. 上传你的发布包内容,然后重启Function App
  4. 回到Function App页面,看是否能看到函数。如果手动上传能显示,说明问题出在Octopus的部署步骤配置上;如果还是不显示,说明代码或Function App的运行时配置有问题。

内容的提问来源于stack exchange,提问作者Per

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:01:20