本地启动依赖IHttpClientFactory的Azure Function项目抛FileNotFound异常
问题描述
我是Azure Function新手,正在创建依赖IHttpClientFactory注入的Azure Function测试项目,但在Visual Studio本地启动时一直遇到FileNotFoundException。
环境信息:
- .NET 6.0 + Azure Function v4
- Visual Studio 17.5.0
- 完全按照官方文档创建项目,已查阅Stack Overflow类似案例仍无法解决
项目代码
项目文件(.csproj)
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <AzureFunctionsVersion>v4</AzureFunctionsVersion> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" /> <PackageReference Include="Microsoft.Extensions.Http" Version="7.0.0" /> <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.3" /> </ItemGroup> <ItemGroup> <None Update="host.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> <None Update="local.settings.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToPublishDirectory>Never</CopyToPublishDirectory> </None> </ItemGroup> </Project>
local.settings.json
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet" } }
Startup类
using Microsoft.Azure.Functions.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection; [assembly: FunctionsStartup(typeof(AzureFunctionTest.Startup))] namespace AzureFunctionTest; public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddHttpClient(); builder.Services.AddSingleton<MyService>((s) => { return new MyService(); }); } }
Azure Function类
using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; using Microsoft.Extensions.Logging; namespace AzureFunctionTest; public class Function1 { private readonly HttpClient _client; private readonly IMyService _service; public Function1(IHttpClientFactory httpClientFactory, IMyService service) { _client = httpClientFactory.CreateClient(); _service = service; } [FunctionName("Function1")] public async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log) { var response = await _client.GetAsync("https://www.microsoft.com"); var message = $"{_service.GetMessage()}: {response.Headers.Date}"; return new OkObjectResult(message); } }
异常信息
异常在WebJobsBuilderExtensions.ConfigureStartup方法抛出,提示无法加载程序集Microsoft.Extensions.Http:
异常堆栈跟踪
System.IO.FileNotFoundException HResult=0x80070002 Message=Could not load file or assembly 'Microsoft.Extensions.Http, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified. Source=AzureFunctionTest StackTrace: at AzureFunctionTest.Startup.Configure(IFunctionsHostBuilder builder) in C:\Users\EM\Documents\Visual Studio 2022\Projects\AzureFunctionTest\AzureFunctionTest\Startup.cs:line 18 at Microsoft.Azure.WebJobs.WebJobsBuilderExtensions.ConfigureStartup(IWebJobsStartup startup, WebJobsBuilderContext context, IWebJobsBuilder builder) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Hosting\WebJobsBuilderExtensions.cs:line 162 at Microsoft.Azure.WebJobs.WebJobsBuilderExtensions.ConfigureAndLogUserConfiguredServices(IWebJobsStartup startup, WebJobsBuilderContext context, IWebJobsBuilder builder, ILoggerFactory loggerFactory) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Hosting\WebJobsBuilderExtensions.cs:line 130 at Microsoft.Azure.WebJobs.WebJobsBuilderExtensions.UseWebJobsStartup(IWebJobsBuilder builder, Type startupType, WebJobsBuilderContext context, ILoggerFactory loggerFactory) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Hosting\WebJobsBuilderExtensions.cs:line 115 at Microsoft.Azure.WebJobs.WebJobsBuilderExtensions.UseExternalStartup(IWebJobsBuilder builder, IWebJobsStartupTypeLocator startupTypeLocator, WebJobsBuilderContext context, ILoggerFactory loggerFactory) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Hosting\WebJobsBuilderExtensions.cs:line 213 at Microsoft.Azure.WebJobs.Script.ScriptHostBuilderExtensions.<>c__DisplayClass7_0.<AddScriptHostCore>b__1(HostBuilderContext context, IWebJobsBuilder webJobsBuilder) at Microsoft.Extensions.Hosting.WebJobsHostBuilderExtensions.<>c__DisplayClass5_0.<ConfigureWebJobs>b__1(HostBuilderContext context, IServiceCollection services) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Hosting\WebJobsHostBuilderExtensions.cs:line 54 at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider() at Microsoft.Extensions.Hosting.HostBuilder.Build() at Microsoft.Azure.WebJobs.Script.WebHost.WebJobsScriptHostService.<UnsynchronizedStartHostAsync>d__52.MoveNext()
异常输出
Exception thrown: 'System.IO.FileNotFoundException' in Microsoft.Azure.WebJobs.Host.dll An exception of type 'System.IO.FileNotFoundException' occurred in Microsoft.Azure.WebJobs.Host.dll but was not handled in user code Could not load file or assembly 'Microsoft.Extensions.Http, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
项目启动输出
Azure Functions Core Tools are up to date. AzureFunctionTest: Azurite Blob service is starting at http://127.0.0.1:10000 AzureFunctionTest: Azurite Blob service is successfully listening at http://127.0.0.1:10000 AzureFunctionTest: Azurite Queue service is starting at http://127.0.0.1:10001 AzureFunctionTest: Azurite Queue service is successfully listening at http://127.0.0.1:10001 AzureFunctionTest: Azurite Table service is starting at http://127.0.0.1:10002 AzureFunctionTest: Azurite Table service is successfully listening at http://127.0.0.1:10002
解决方案
1. 调整扩展包版本
Azure Functions v4(基于.NET 6)与.NET 7版本的Microsoft.Extensions库存在兼容性问题,将Microsoft.Extensions.DependencyInjection和Microsoft.Extensions.Http的版本降至与.NET 6匹配的稳定版本(如6.0.16):
修改项目文件中的包引用:
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.16" /> <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.16" />
2. 清理重建项目
- 执行清理解决方案(菜单:生成 → 清理解决方案)
- 删除项目目录下的
bin和obj文件夹 - 执行重建解决方案(菜单:生成 → 重建解决方案)
3. 验证Core Tools版本
确保本地Azure Functions Core Tools为v4.x版本,可通过命令行检查:
func --version
版本过低时,在Visual Studio扩展管理器中更新Azure Functions和Web Jobs工具。
4. 确认程序集复制行为
右键项目中的Microsoft.Extensions.Http包 → 属性,确保复制本地设置为True,并检查输出目录中是否存在Microsoft.Extensions.Http.dll文件。
内容的提问来源于stack exchange,提问作者emoacht
相关产品推荐
相关产品推荐

