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

.NET 6中初始化OpenTelemetry对接Honeycomb时遇异常

问题解决:.NET 6中OpenTelemetry对接Honeycomb抛出MissingMethodException

异常详情

配置OpenTelemetry对接Honeycomb时触发以下异常:

System.MissingMethodException: 'Method not found: 'OpenTelemetry.Trace.TracerProviderBuilder OpenTelemetry.Trace.TracerProviderBuilderExtensions.ConfigureBuilder(OpenTelemetry.Trace.TracerProviderBuilder, System.Action`2<System.IServiceProvider,OpenTelemetry.Trace.TracerProviderBuilder>)'.'

根本原因

该异常由OpenTelemetry相关NuGet包版本不兼容导致:Honeycomb.OpenTelemetry包对基础OpenTelemetry包有严格版本依赖,当项目中安装的OpenTelemetry核心包(如OpenTelemetry、OpenTelemetry.Extensions.Hosting)版本与Honeycomb包要求的版本不一致时,就会出现方法找不到的错误。

解决方案

1. 统一OpenTelemetry包版本

  • 卸载项目中所有OpenTelemetry相关NuGet包,重新安装Honeycomb.OpenTelemetry——它会自动安装兼容的OpenTelemetry依赖包,规避版本冲突。
  • 或者在项目的.csproj文件中添加版本属性,强制所有OpenTelemetry包使用同一版本(版本号需匹配Honeycomb.OpenTelemetry的依赖要求,可查看NuGet包详情页的依赖信息):
    <PropertyGroup>
      <OpenTelemetryVersion>1.5.1</OpenTelemetryVersion>
    </PropertyGroup>
    

2. 优化配置代码

原代码中TracerProvider.Default.GetTracer调用时机过早,可能在TracerProvider完全初始化前执行,建议改为通过依赖注入获取Tracer;同时调整配置逻辑确保正确性:

using Microsoft.EntityFrameworkCore;
using ProductCRUDAPI.Models;
using OpenTelemetry.Trace;
using OpenTelemetry;
using Honeycomb.OpenTelemetry;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DB");
builder.Services.AddDbContextPool<DbContext>(option => option.UseSqlServer(connectionString));

var honeycombOptions = builder.Configuration.GetHoneycombOptions();

builder.Services.AddControllers();

// 调整OpenTelemetry配置顺序,确保依赖正确加载
builder.Services.AddOpenTelemetry()
    .WithTracing(otelBuilder =>
    {
        otelBuilder
            .AddHoneycomb(honeycombOptions)
            .AddAspNetCoreInstrumentationWithBaggage();
    })
    .StartWithHost();

// 通过依赖注入安全获取Tracer
builder.Services.AddSingleton(sp =>
{
    var tracerProvider = sp.GetRequiredService<TracerProvider>();
    return tracerProvider.GetTracer(honeycombOptions.ServiceName);
});

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthorization();
app.MapControllers();

app.Run();

3. 验证依赖状态

执行dotnet restore命令确保所有依赖包正确安装,然后查看项目的NuGet依赖项,确认没有不同版本的OpenTelemetry包共存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:05:20