diff options
author | Brennan <brecon@microsoft.com> | 2021-11-13 02:24:26 +0300 |
---|---|---|
committer | Brennan <brecon@microsoft.com> | 2021-11-13 02:24:26 +0300 |
commit | 50714234b9ebace519b4db641a1b197ca6accd06 (patch) | |
tree | 3901434942a538ee487786975c8396157b190844 | |
parent | 3592b6e11d506f994cbce306b5745019f41297e4 (diff) |
some fbbrecon/trim
5 files changed, 22 insertions, 9 deletions
diff --git a/src/Hosting/Hosting/src/StaticWebAssets/StaticWebAssetsLoader.cs b/src/Hosting/Hosting/src/StaticWebAssets/StaticWebAssetsLoader.cs index 6bb7e36a8f..ebcd0a78dc 100644 --- a/src/Hosting/Hosting/src/StaticWebAssets/StaticWebAssetsLoader.cs +++ b/src/Hosting/Hosting/src/StaticWebAssets/StaticWebAssetsLoader.cs @@ -3,6 +3,7 @@ #nullable enable +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; using System.Reflection; @@ -44,13 +45,12 @@ public class StaticWebAssetsLoader environment.WebRootFileProvider = new CompositeFileProvider(new[] { provider, environment.WebRootFileProvider }); } + [UnconditionalSuppressMessage("Trimming", "IL2026:RequiresUnreferencedCodeAttribute", Justification = "string should not be trimmed away and thus is safe to use")] internal static Stream? ResolveManifest(IWebHostEnvironment environment, IConfiguration configuration) { try { -#pragma warning disable IL2026 // RequiresUnreferencedCodeAttribute: string should not be trimmed away and thus is safe to use var candidate = configuration.GetValue<string>(WebHostDefaults.StaticWebAssetsKey) ?? ResolveRelativeToAssembly(environment); -#pragma warning restore IL2026 if (candidate != null && File.Exists(candidate)) { return File.OpenRead(candidate); diff --git a/src/Http/Routing/src/DefaultInlineConstraintResolver.cs b/src/Http/Routing/src/DefaultInlineConstraintResolver.cs index c10ba88070..3c5b12e36e 100644 --- a/src/Http/Routing/src/DefaultInlineConstraintResolver.cs +++ b/src/Http/Routing/src/DefaultInlineConstraintResolver.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.Options; namespace Microsoft.AspNetCore.Routing; @@ -24,6 +25,7 @@ public class DefaultInlineConstraintResolver : IInlineConstraintResolver /// </summary> /// <param name="routeOptions">Accessor for <see cref="RouteOptions"/> containing the constraints of interest.</param> /// <param name="serviceProvider">The <see cref="IServiceProvider"/> to get service arguments from.</param> + [UnconditionalSuppressMessage("Trimming", "IL2026:RequiresUnreferencedCodeAttribute", Justification = "ConstraintMap is safe to use if it's only used for reading/deleting constraints")] public DefaultInlineConstraintResolver(IOptions<RouteOptions> routeOptions, IServiceProvider serviceProvider) { if (routeOptions == null) @@ -36,9 +38,7 @@ public class DefaultInlineConstraintResolver : IInlineConstraintResolver throw new ArgumentNullException(nameof(serviceProvider)); } -#pragma warning disable IL2026 // RequiresUnreferencedCodeAttribute: ConstraintMap is safe to use if it's only used for reading/deleting constraints _inlineConstraintMap = routeOptions.Value.ConstraintMap; -#pragma warning restore IL2026 _serviceProvider = serviceProvider; } diff --git a/src/Http/Routing/src/DefaultParameterPolicyFactory.cs b/src/Http/Routing/src/DefaultParameterPolicyFactory.cs index 363fa4b4e7..d9c9b0e626 100644 --- a/src/Http/Routing/src/DefaultParameterPolicyFactory.cs +++ b/src/Http/Routing/src/DefaultParameterPolicyFactory.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. using System; +using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Routing.Constraints; using Microsoft.AspNetCore.Routing.Patterns; using Microsoft.Extensions.Options; @@ -36,6 +37,7 @@ internal class DefaultParameterPolicyFactory : ParameterPolicyFactory return parameterPolicy; } + [UnconditionalSuppressMessage("Trimming", "IL2026:RequiresUnreferencedCodeAttribute", Justification = "ConstraintMap is safe to use if it's only used for reading/deleting constraints")] public override IParameterPolicy Create(RoutePatternParameterPart? parameter, string inlineText) { if (inlineText == null) @@ -44,9 +46,7 @@ internal class DefaultParameterPolicyFactory : ParameterPolicyFactory } var parameterPolicy = ParameterPolicyActivator.ResolveParameterPolicy<IParameterPolicy>( -#pragma warning disable IL2026 // RequiresUnreferencedCodeAttribute: ConstraintMap is safe to use if it's only used for reading/deleting constraints _options.ConstraintMap, -#pragma warning restore IL2026 _serviceProvider, inlineText, out var parameterPolicyKey); diff --git a/src/Shared/StackTrace/StackFrame/StackTraceHelper.cs b/src/Shared/StackTrace/StackFrame/StackTraceHelper.cs index 4234b811f3..9393bd79e2 100644 --- a/src/Shared/StackTrace/StackFrame/StackTraceHelper.cs +++ b/src/Shared/StackTrace/StackFrame/StackTraceHelper.cs @@ -17,7 +17,6 @@ namespace Microsoft.Extensions.StackTrace.Sources; internal class StackTraceHelper { - [UnconditionalSuppressMessage("Trimming", "IL2026:RequiresUnreferencedCode", Justification = "StackFrame.GetMethod() is best effort to display helpful information.")] public static IList<StackFrameInfo> GetFrames(Exception exception, out AggregateException? error) { if (exception == null) @@ -43,7 +42,7 @@ internal class StackTraceHelper for (var i = 0; i < stackFrames.Length; i++) { var frame = stackFrames[i]; - var method = frame.GetMethod(); + var method = GetStackFrameMethod(frame); // Always show last stackFrame if (!ShowInStackTrace(method) && i < stackFrames.Length - 1) @@ -51,7 +50,7 @@ internal class StackTraceHelper continue; } - var stackFrame = new StackFrameInfo(frame.GetFileLineNumber(), frame.GetFileName(), frame, GetMethodDisplayString(frame.GetMethod())); + var stackFrame = new StackFrameInfo(frame.GetFileLineNumber(), frame.GetFileName(), frame, GetMethodDisplayString(GetStackFrameMethod(frame))); frames.Add(stackFrame); } @@ -65,6 +64,13 @@ internal class StackTraceHelper return frames; } + [UnconditionalSuppressMessage("Trimming", "IL2026:RequiresUnreferencedCodeAttribute", Justification = "StackFrame.GetMethod() is best effort to display helpful information.")] + // Separate method so we don't potentially hide any more linker warnings in the calling method + private static MethodBase? GetStackFrameMethod(StackFrame frame) + { + return frame.GetMethod(); + } + internal static MethodDisplayInfo? GetMethodDisplayString(MethodBase? method) { // Special case: no method available diff --git a/src/Shared/StaticWebAssets/ManifestStaticWebAssetFileProvider.cs b/src/Shared/StaticWebAssets/ManifestStaticWebAssetFileProvider.cs index 0b89d28b30..3d00f6a0f3 100644 --- a/src/Shared/StaticWebAssets/ManifestStaticWebAssetFileProvider.cs +++ b/src/Shared/StaticWebAssets/ManifestStaticWebAssetFileProvider.cs @@ -325,6 +325,9 @@ internal sealed class ManifestStaticWebAssetFileProvider : IFileProvider [UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "Public properties preserved with DynamicDependency")] [DynamicDependency(JsonSerializerSettings, typeof(StaticWebAssetManifest))] + [DynamicDependency(JsonSerializerSettings, typeof(StaticWebAssetNode))] + [DynamicDependency(JsonSerializerSettings, typeof(StaticWebAssetMatch))] + [DynamicDependency(JsonSerializerSettings, typeof(StaticWebAssetPattern))] internal static StaticWebAssetManifest Parse(Stream manifest) { return JsonSerializer.Deserialize<StaticWebAssetManifest>(manifest)!; @@ -371,6 +374,8 @@ internal sealed class ManifestStaticWebAssetFileProvider : IFileProvider { [UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "Public properties preserved with DynamicDependency")] [DynamicDependency(JsonSerializerSettings, typeof(StaticWebAssetNode))] + [DynamicDependency(JsonSerializerSettings, typeof(StaticWebAssetMatch))] + [DynamicDependency(JsonSerializerSettings, typeof(StaticWebAssetPattern))] public override Dictionary<string, StaticWebAssetNode> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var parsed = JsonSerializer.Deserialize<IDictionary<string, StaticWebAssetNode>>(ref reader, options)!; @@ -429,6 +434,8 @@ internal sealed class ManifestStaticWebAssetFileProvider : IFileProvider [UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "Public properties preserved with DynamicDependency")] [DynamicDependency(JsonSerializerSettings, typeof(StaticWebAssetNode))] + [DynamicDependency(JsonSerializerSettings, typeof(StaticWebAssetMatch))] + [DynamicDependency(JsonSerializerSettings, typeof(StaticWebAssetPattern))] public override void Write(Utf8JsonWriter writer, Dictionary<string, StaticWebAssetNode> value, JsonSerializerOptions options) { JsonSerializer.Serialize(writer, value, options); |