diff --git a/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs b/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs index c03c2be..a3b495d 100644 --- a/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs +++ b/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; +using System.Runtime.CompilerServices; using System.Text.RegularExpressions; using Microsoft.Extensions.Configuration; @@ -548,15 +549,24 @@ static IReadOnlyCollection FindEventEnricherConfigurationMethods(IRe static List FindConfigurationExtensionMethods(IReadOnlyCollection configurationAssemblies, Type configType) { // ExtensionAttribute can be polyfilled to support extension methods - bool HasExtensionAttribute(MethodInfo m) => - m.CustomAttributes.Any(a => a.AttributeType.FullName == "System.Runtime.CompilerServices.ExtensionAttribute"); + static bool HasCustomExtensionAttribute(MethodInfo m) + { + try + { + return m.CustomAttributes.Any(a => a.AttributeType.FullName == "System.Runtime.CompilerServices.ExtensionAttribute"); + } + catch (CustomAttributeFormatException) + { + return false; + } + } return configurationAssemblies .SelectMany(a => a.ExportedTypes .Select(t => t.GetTypeInfo()) .Where(t => t.IsSealed && t.IsAbstract && !t.IsNested)) .SelectMany(t => t.DeclaredMethods) - .Where(m => m.IsStatic && m.IsPublic && HasExtensionAttribute(m)) + .Where(m => m.IsStatic && m.IsPublic && (m.IsDefined(typeof(ExtensionAttribute), false) || HasCustomExtensionAttribute(m))) .Where(m => m.GetParameters()[0].ParameterType == configType) .ToList(); }