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

本地启动依赖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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:48:17