From 49968e2ed82d2a8d4849f5ee1b0f516c32b43220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Strehovsk=C3=BD?= Date: Thu, 14 Nov 2024 09:21:39 +0100 Subject: [PATCH] Update DynamicallyAccessedMembers annotation on EventSource This takes advantage of #109814. This is in theory a breaking change in case someone took advantage of our annotation and is doing their own reflection on `EventSource` descendants. Someone else reflecting on EventSource is problematic however. We placed around various suppressions due to our own annotations like this: https://github.com/dotnet/runtime/blob/0d62887a30553b8177dc90f9e39559be0e6c7707/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs#L414-L424 It means that if someone else is reflection-accessing these, they would not get a trimming warning. Hopefully, nobody does that. This PR also assumes that nobody does that (and the PR should therefore not be breaking in practice). We annotate the class for our purposes, but someone else could be taking advantage of that in their own code. --- .../ref/System.Diagnostics.Tracing.cs | 6 +-- .../System/Diagnostics/Tracing/EventSource.cs | 8 +-- ...iCompatBaseline.NetCoreAppLatestStable.xml | 54 +++++++++++++++++++ 3 files changed, 61 insertions(+), 7 deletions(-) diff --git a/src/libraries/System.Diagnostics.Tracing/ref/System.Diagnostics.Tracing.cs b/src/libraries/System.Diagnostics.Tracing/ref/System.Diagnostics.Tracing.cs index f4a06e51691b0c..30f85c26f85250 100644 --- a/src/libraries/System.Diagnostics.Tracing/ref/System.Diagnostics.Tracing.cs +++ b/src/libraries/System.Diagnostics.Tracing/ref/System.Diagnostics.Tracing.cs @@ -145,7 +145,7 @@ public enum EventOpcode Send = 9, Receive = 240, } - [System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)] + [System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes)] public partial class EventSource : System.IDisposable { protected EventSource() { } @@ -164,8 +164,8 @@ public event System.EventHandler GetSources() { throw null; } diff --git a/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs b/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs index 0b727874ddc5ad..73db299b6e018f 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventSource.cs @@ -399,7 +399,10 @@ public static string GetName(Type eventSourceType) return GetName(eventSourceType, EventManifestOptions.None); } - private const DynamicallyAccessedMemberTypes ManifestMemberTypes = DynamicallyAccessedMemberTypes.All; + private const DynamicallyAccessedMemberTypes ManifestMemberTypes = + DynamicallyAccessedMemberTypes.PublicMethods + | DynamicallyAccessedMemberTypes.NonPublicMethods + | DynamicallyAccessedMemberTypes.PublicNestedTypes; /// /// Returns a string of the XML manifest associated with the eventSourceType. The scheme for this XML is @@ -2517,9 +2520,6 @@ internal partial struct EventMetadata private TraceLoggingEventTypes _traceLoggingEventTypes; public TraceLoggingEventTypes TraceLoggingEventTypes { - [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2112:ReflectionToRequiresUnreferencedCode", - Justification = "EnsureDescriptorsInitialized's use of GetType preserves this method which " + - "requires unreferenced code, but EnsureDescriptorsInitialized does not access this member and is safe to call.")] [RequiresUnreferencedCode(EventSourceRequiresUnreferenceMessage)] get { diff --git a/src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml b/src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml index f74069e67951e9..92e83d32f8c46b 100644 --- a/src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml +++ b/src/libraries/apicompat/ApiCompatBaseline.NetCoreAppLatestStable.xml @@ -277,12 +277,30 @@ net9.0/mscorlib.dll net10.0/mscorlib.dll + + CP0015 + M:System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String,System.Diagnostics.Tracing.EventManifestOptions)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] + net9.0/mscorlib.dll + net10.0/mscorlib.dll + + + CP0015 + M:System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] + net9.0/mscorlib.dll + net10.0/mscorlib.dll + CP0015 M:System.MulticastDelegate.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] net9.0/mscorlib.dll net10.0/mscorlib.dll + + CP0015 + T:System.Diagnostics.Tracing.EventSource:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] + net9.0/mscorlib.dll + net10.0/mscorlib.dll + CP0015 M:System.Delegate.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] @@ -307,18 +325,54 @@ net9.0/netstandard.dll net10.0/netstandard.dll + + CP0015 + M:System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String,System.Diagnostics.Tracing.EventManifestOptions)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] + net9.0/netstandard.dll + net10.0/netstandard.dll + + + CP0015 + M:System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] + net9.0/netstandard.dll + net10.0/netstandard.dll + CP0015 M:System.MulticastDelegate.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] net9.0/netstandard.dll net10.0/netstandard.dll + + CP0015 + T:System.Diagnostics.Tracing.EventSource:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] + net9.0/netstandard.dll + net10.0/netstandard.dll + CP0015 T:System.Security.Cryptography.AesGcm:[T:System.Runtime.Versioning.SupportedOSPlatformAttribute] net9.0/netstandard.dll net10.0/netstandard.dll + + CP0015 + M:System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String,System.Diagnostics.Tracing.EventManifestOptions)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] + net9.0/System.Diagnostics.Tracing.dll + net10.0/System.Diagnostics.Tracing.dll + + + CP0015 + M:System.Diagnostics.Tracing.EventSource.GenerateManifest(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] + net9.0/System.Diagnostics.Tracing.dll + net10.0/System.Diagnostics.Tracing.dll + + + CP0015 + T:System.Diagnostics.Tracing.EventSource:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute] + net9.0/System.Diagnostics.Tracing.dll + net10.0/System.Diagnostics.Tracing.dll + CP0015 M:System.Delegate.#ctor(System.Type,System.String)$0:[T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute]