From d76ccdda64d2f60203517cc7486fcacd32fb74bf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Mar 2026 23:09:36 +0000 Subject: [PATCH 1/2] Include declaring type name in assembly loading handler tracing events Change handler.Method.Name to include DeclaringType.FullName for both AssemblyLoadContextResolvingHandlerInvoked and AppDomainAssemblyResolveHandlerInvoked events. This provides the full type-qualified handler name (e.g. "MyNamespace.MyType.OnResolving") instead of just the method name, making it easier to diagnose assembly loading issues when using dotnet-trace. Fixes #57408 Co-authored-by: elinor-fung <47805090+elinor-fung@users.noreply.github.com> Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/e51e0057-0235-4a76-9e91-fbd591861b8f --- .../src/System/Runtime/Loader/AssemblyLoadContext.cs | 4 ++-- .../binding/tracing/BinderTracingTest.EventHandlers.cs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.cs index 7fd30e30c6810f..e91e295559f7df 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.cs @@ -625,7 +625,7 @@ public void Dispose() { TraceResolvingHandlerInvoked( assemblyName.FullName, - handler.Method.Name, + $"{handler.Method.DeclaringType?.FullName}.{handler.Method.Name}", this != Default ? ToString() : Name, resolvedAssembly?.FullName, resolvedAssembly != null && !resolvedAssembly.IsDynamic ? resolvedAssembly.Location : null); @@ -722,7 +722,7 @@ internal static void InvokeAssemblyLoadEvent(Assembly assembly) { TraceAssemblyResolveHandlerInvoked( name, - handler.Method.Name, + $"{handler.Method.DeclaringType?.FullName}.{handler.Method.Name}", asm?.FullName, asm != null && !asm.IsDynamic ? asm.Location : null); } diff --git a/src/tests/Loader/binding/tracing/BinderTracingTest.EventHandlers.cs b/src/tests/Loader/binding/tracing/BinderTracingTest.EventHandlers.cs index dbd3570ccc5e6f..dec1ef23b3a60b 100644 --- a/src/tests/Loader/binding/tracing/BinderTracingTest.EventHandlers.cs +++ b/src/tests/Loader/binding/tracing/BinderTracingTest.EventHandlers.cs @@ -23,7 +23,7 @@ public BinderTestException(string message) } partial class BinderTracingTest { - private const string AssemblyLoadFromHandlerName = "LoadFromResolveHandler"; + private const string AssemblyLoadFromHandlerName = "System.Reflection.Assembly.LoadFromResolveHandler"; [BinderTest] public static BindOperation AssemblyLoadContextResolving_ReturnNull() @@ -397,7 +397,7 @@ private Assembly OnAssemblyLoadContextResolving(AssemblyLoadContext context, Ass var invocation = new HandlerInvocation() { AssemblyName = assemblyName, - HandlerName = nameof(OnAssemblyLoadContextResolving), + HandlerName = $"{GetType().FullName}.{nameof(OnAssemblyLoadContextResolving)}", AssemblyLoadContext = context == AssemblyLoadContext.Default ? context.Name : context.ToString(), }; if (asm != null) @@ -421,7 +421,7 @@ private Assembly OnAppDomainAssemblyResolve(object sender, ResolveEventArgs args var invocation = new HandlerInvocation() { AssemblyName = assemblyName, - HandlerName = nameof(OnAppDomainAssemblyResolve), + HandlerName = $"{GetType().FullName}.{nameof(OnAppDomainAssemblyResolve)}", }; if (asm != null) { From da383d619bb59bdd391526d93cd6ec23e2f97377 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 23 Mar 2026 19:20:48 +0000 Subject: [PATCH 2/2] Handle null DeclaringType in handler name formatting Use pattern matching to conditionally include type name only when DeclaringType is non-null. When null (e.g. DynamicMethod), fall back to just the method name instead of emitting a leading dot. Co-authored-by: elinor-fung <47805090+elinor-fung@users.noreply.github.com> Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/9a5931e6-d3f8-4fd1-92b9-1649d1bd575c --- .../src/System/Runtime/Loader/AssemblyLoadContext.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.cs index e91e295559f7df..77ded38e110557 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.cs @@ -625,7 +625,7 @@ public void Dispose() { TraceResolvingHandlerInvoked( assemblyName.FullName, - $"{handler.Method.DeclaringType?.FullName}.{handler.Method.Name}", + handler.Method.DeclaringType is Type declaringType ? $"{declaringType.FullName}.{handler.Method.Name}" : handler.Method.Name, this != Default ? ToString() : Name, resolvedAssembly?.FullName, resolvedAssembly != null && !resolvedAssembly.IsDynamic ? resolvedAssembly.Location : null); @@ -722,7 +722,7 @@ internal static void InvokeAssemblyLoadEvent(Assembly assembly) { TraceAssemblyResolveHandlerInvoked( name, - $"{handler.Method.DeclaringType?.FullName}.{handler.Method.Name}", + handler.Method.DeclaringType is Type declaringType ? $"{declaringType.FullName}.{handler.Method.Name}" : handler.Method.Name, asm?.FullName, asm != null && !asm.IsDynamic ? asm.Location : null); }