opentelemetry-dotnet: AspNet Net 6.0: FileLoadException: Could not load file or assembly 'System.Diagnostics.DiagnosticSource, Version=7.0.0.0
Question
When using the latest version of the OpenTelemetry NuGet package (currently 1.4.0-rc.1) an AspNetCore Net6.0 fails to start because OTel has taken a dependency on System.Diagnostics.DiagnosticSource 7.0.0.
<ItemGroup>
<PackageReference Include="OpenTelemetry.Api" Version="1.4.0-rc.1" NoWarn="NU5104" />
<PackageReference Include="OpenTelemetry" Version="1.4.0-rc.1" NoWarn="NU5104" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.4.0-rc.1" NoWarn="NU5104" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.4.0-rc.1" NoWarn="NU5104" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.4.0-rc.1" NoWarn="NU5104" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.0.0-rc9.10" NoWarn="NU5104" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.0.0-rc9.10" NoWarn="NU5104" />
<PackageReference Include="OpenTelemetry.Instrumentation.SqlClient" Version="1.0.0-rc9.10" NoWarn="NU5104" />
</ItemGroup>
When running an ASP.NET NET6.0 App, an exception ocurrs:
System.TypeInitializationException
HResult=0x80131534
Message=The type initializer for 'OpenTelemetry.Sdk' threw an exception.
Source=OpenTelemetry
StackTrace:
at OpenTelemetry.Sdk.get_SuppressInstrumentation()
at Microsoft.Extensions.DependencyInjection.ProviderBuilderServiceCollectionExtensions.AddOpenTelemetrySharedProviderBuilderServices(IServiceCollection services)
at OpenTelemetry.Trace.TracerProviderBuilderBase..ctor()
at OpenTelemetry.Trace.TracerProviderBuilderHosting..ctor(IServiceCollection services)
at Microsoft.Extensions.DependencyInjection.OpenTelemetryServicesExtensions.AddOpenTelemetryTracing(IServiceCollection services, Action`1 configure)
at App.OpenTelemetry.OpenTelemetry.OpenTelemetryProvider.InstrumentAspNetCoreApplication(IServiceCollection services) in D:\DEV\git\DotNetClasses\dotnet\src\dotnetcore\Providers\OpenTelemetry\OpenTelemetry\OpenTelemetryProvider.cs:line 17
at App.Services.OpenTelemetry.OpenTelemetryService.Setup(IServiceCollection services) in D:\DEV\git\DotNetClasses\dotnet\src\dotnetcore\GxClasses\Services\OpenTelemetry\OpenTelemetryService.cs:line 48
at App.Application.Startup.ConfigureServices(IServiceCollection services) in D:\DEV\git\DotNetClasses\dotnet\src\dotnetcore\GxNetCoreStartup\Startup.cs:line 140
at System.RuntimeMethodHandle.InvokeMethod(Object target, Span`1& arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.InvokeCore(Object instance, IServiceCollection services)
at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.<>c__DisplayClass9_0.<Invoke>g__Startup|0(IServiceCollection serviceCollection)
at Microsoft.AspNetCore.Hosting.StartupLoader.ConfigureServicesDelegateBuilder`1.<>c__DisplayClass15_0.<BuildStartupServicesFilterPipeline>g__RunPipeline|0(IServiceCollection services)
at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.Invoke(Object instance, IServiceCollection services)
at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.<>c__DisplayClass8_0.<Build>b__0(IServiceCollection services)
at Microsoft.AspNetCore.Hosting.StartupLoader.ConfigureServicesDelegateBuilder`1.<>c__DisplayClass14_0.<ConfigureServices>g__ConfigureServicesWithContainerConfiguration|0(IServiceCollection services)
at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services)
This exception was originally thrown at this call stack:
[External Code]
GxClasses.Helpers.AssemblyLoader.LoadContext_Resolving(System.Runtime.Loader.AssemblyLoadContext, System.Reflection.AssemblyName) in CompatibilityExtensions.cs
[External Code]
Inner Exception 1:
FileLoadException: Could not load file or assembly 'System.Diagnostics.DiagnosticSource, Version=7.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. Could not find or load a specific file. (0x80131621)
It seems that DiagnosticSource is not compatible with .NET6? Seems to be related to this Issue: https://github.com/Azure/azure-functions-host/issues/8938
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Comments: 16 (6 by maintainers)
Another workaround was provided in a comment that works with in-process model.
The stable version 1.3.2 worked for me
I couldn’t solve it. Tested the example app and it worked. So I assumed that it was something of my installation. I went back to old OTEL version where System.Diagnostics.DiagnosticSource v7 is not required.
However, seeing two more reports about this, makes me wonder if there is a real issue there.
DiagnosticSource 7.0 is compatible with .NET 6.
Using our example ASP.NET Core app, I’m not able to reproduce what you’re seeing. The app is a .NET 6 application.
Do you have a minimal repro you can provide?