Description
Description
The System.Diagnostics.DiagnosticSource 9.0.0 package doesn't appear to be trim safe. Specifically the ActivitySource
class which appears to be missing a constructor in a published app.
If I try to call this constructor in AOT-published code, I get a MissingMethodException
:
Unhandled Exception: System.MissingMethodException: Method not found: 'Void System.Diagnostics.ActivitySource..ctor(System.String)'.
$>d__0.MoveNext() + 0x15
at Internal.Runtime.TypeLoaderExceptionHelper.CreateMissingMethodException(ExceptionStringID, String) + 0x40
at Internal.Runtime.CompilerHelpers.ThrowHelpers.ThrowMissingMethodException(ExceptionStringID, String) + 0x9
at Program.<
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.StartTStateMachine + 0x3f
at Program.$(String[]) + 0x2f
at Program.(String[] args) + 0x9
Reproduction Steps
-
Create a normal .NET 8 Console App with NativeAOT enabled.
-
Replace Program.cs
using System.Diagnostics;
var a = new ActivitySource("test");
Console.WriteLine(a.ToString());
-
Publish and run
-
App successfully runs to completion. ✔️
-
Install the System.Diagnostics.DiagnosticSource 9.0.0 package
-
Publish and run
-
Application crashes with MissingMethodException ❌
-
Downgrade System.Diagnostics.DiagnosticSource 9.0.0 package to 8.0.1
-
Publish and run
-
App successfully runs to completion. ✔️
Expected behavior
Constructor should be callable in AOT
Actual behavior
Constructor is not callable in AOT
Regression?
8.0.1 works, 9.0.0 does not.
Known Workarounds
No response
Configuration
.NET Version: 8.0
OS: Windows
Arch: x64
Other information
No response
Metadata
Metadata
Assignees
Type
Projects
Status
No status
Activity
dotnet-policy-service commentedon Nov 15, 2024
Tagging subscribers to this area: @tarekgh, @tommcdon, @pjanotti
See info in area-owners.md if you want to be subscribed.
dotnet-policy-service commentedon Nov 15, 2024
Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.
tarekgh commentedon Nov 15, 2024
@agocke, @MichalStrehovsky I confirmed the issue reproduce. The constructor exists in the
ActivitySource
class System.Diagnostics.ActivitySource..ctor(System.String). Note, this constructor didn't exist in net8 version of the library. Are we performing the trimming against the assembly shipped with the framework?The ILLink.Substitutions.xml in both net8 and net9 versions of System.Diagnostics.DiagnosticSource don't have any section for
ActivitySource
type. Could you please have a look?tarekgh commentedon Nov 15, 2024
Making the app target net9 makes the issue disappear.
jkotas commentedon Nov 15, 2024
Looks like a dup of #108909 and related issues.
The conflicts between inbox assemblies and OOB packages are not resolved correctly for AOT compilation. The inbox assembly wins even when the OOB packages provides higher version.
tarekgh commentedon Nov 15, 2024
I hope we can service the fix of this issue on net8 if possible. My understanding is that
OpenTelemetry
started to take dependency onSystem.Diagnostics.DiagnosticSource
v9.0. This will make net8 users broken if they want to build as AOT.CC @reyang @noahfalk
jamiewinder commentedon Nov 16, 2024
@tarekgh This is indeed how I first encountered the issue before reducing it down to the above. It isn't just OpenTelemetry either, a lot of the recently released Microsoft 9.x libraries now have this dependency, rendering them unusable with AOT and .NET 8.
16 remaining items