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

.NET 6 FunctionApp运行报未找到作业函数、入口文件未触发问题

核心错误定位

你踩了.NET Azure Functions 进程内/独立进程(isolated)模型的配置混淆问题,具体错误点有两个:

  1. 特性用反了:[FunctionName]是进程内(In-Process)模型的标记特性,属于Microsoft.Azure.Functions.Worker命名空间;你用的isolated模式从.NET5到.NET6始终用[Function]特性,属于Microsoft.Azure.Functions.Worker命名空间,改完特性后运行时根本识别不到你的函数方法,才会报No job functions found的错误。
  2. 升级只改了框架版本,漏了isolated模式的核心配置,甚至可能混装了两类模型的依赖包,导致Functions宿主默认按进程内模型启动,完全不会加载你写的Program.cs、Startup.cs入口逻辑,才会出现卡加载、入口代码不触发的问题。
分步修复操作
  • 修正csproj项目配置
    首先卸载项目,移除所有Microsoft.Azure.WebJobs开头的NuGet包——这类包是进程内模型专用,和isolated模式完全冲突。然后把csproj内容调整为以下适配.NET6 isolated模式的标准配置,重点确认<FunctionsWorkerRuntime>dotnet-isolated</FunctionsWorkerRuntime>节点存在,缺了这个节点宿主一定会按进程内模型启动:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <OutputType>Exe</OutputType>
    <FunctionsWorkerRuntime>dotnet-isolated</FunctionsWorkerRuntime>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.10.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.7.0" OutputItemType="Analyzer" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.0.13" />
    <!-- 其他需要的扩展包比如Storage、Timer等都选Microsoft.Azure.Functions.Worker.Extensions开头的版本 -->
  </ItemGroup>
</Project>
  • 修正函数特性标记
    把所有函数方法上的[FunctionName]全部换回[Function],同时确认文件头引用的是using Microsoft.Azure.Functions.Worker;命名空间,不要引用WebJobs相关的命名空间。标准函数写法示例:
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;

public class TestFunction
{
    [Function("TestHttpTrigger")]
    public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequestData req)
    {
        var response = req.CreateResponse(System.Net.HttpStatusCode.OK);
        response.WriteString("Hello from isolated mode.");
        return response;
    }
}
  • 修正入口配置
    .NET6 isolated模式不需要单独的Startup.cs,直接把原Startup里的服务注册逻辑迁移到Program.cs的ConfigureServices委托下即可,标准Program.cs配置如下:
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        // 在这里注册你的自定义服务,替换原Startup.ConfigureServices里的逻辑
    })
    .Build();

host.Run();
  • 清理旧编译产物后重启
    删掉项目根目录下的bin、obj文件夹,在项目目录下依次执行命令:
    dotnet clean
    dotnet restore
    
    之后再通过VS或者func start命令启动,就不会出现找不到函数、卡加载、入口不触发的问题。
避坑提醒
  • 两类Functions托管模型的依赖、特性、启动逻辑完全不兼容,绝对不能混装NuGet包、混用特性
  • isolated模式不管是.NET5还是.NET6,函数特性都是[Function],只有进程内模型才用[FunctionName],不要跨模型改特性
  • 升级框架版本时必须同时核对三个核心项:目标框架值、Functions运行时版本、FunctionsWorkerRuntime配置、依赖包版本,只改框架版本必然出问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:09:33