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)

Most upvoted comments

Another workaround was provided in a comment that works with in-process model.

  <ItemGroup>
    <FunctionsPreservedDependencies Include="System.Diagnostics.DiagnosticSource.dll" />

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.

It seems that DiagnosticSource is not compatible with .NET6?

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?