.NET 6 FunctionApp运行报未找到作业函数、入口文件未触发问题
核心错误定位
你踩了.NET Azure Functions 进程内/独立进程(isolated)模型的配置混淆问题,具体错误点有两个:
- 特性用反了:
[FunctionName]是进程内(In-Process)模型的标记特性,属于Microsoft.Azure.Functions.Worker命名空间;你用的isolated模式从.NET5到.NET6始终用[Function]特性,属于Microsoft.Azure.Functions.Worker命名空间,改完特性后运行时根本识别不到你的函数方法,才会报No job functions found的错误。 - 升级只改了框架版本,漏了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文件夹,在项目目录下依次执行命令:
之后再通过VS或者dotnet clean dotnet restorefunc start命令启动,就不会出现找不到函数、卡加载、入口不触发的问题。
避坑提醒
- 两类Functions托管模型的依赖、特性、启动逻辑完全不兼容,绝对不能混装NuGet包、混用特性
- isolated模式不管是.NET5还是.NET6,函数特性都是
[Function],只有进程内模型才用[FunctionName],不要跨模型改特性 - 升级框架版本时必须同时核对三个核心项:目标框架值、Functions运行时版本、
FunctionsWorkerRuntime配置、依赖包版本,只改框架版本必然出问题
内容的提问来源于stack exchange,提问作者Md Aslam
相关产品推荐
相关产品推荐

