Skip to content

Commit 8391832

Browse files
author
Sergey Komisarchik
committed
extensions method discovery workaround for serilog#330
1 parent 8f241f8 commit 8391832

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Reflection;
5+
using System.Runtime.CompilerServices;
56
using System.Text.RegularExpressions;
67

78
using Microsoft.Extensions.Configuration;
@@ -548,15 +549,24 @@ static IReadOnlyCollection<MethodInfo> FindEventEnricherConfigurationMethods(IRe
548549
static List<MethodInfo> FindConfigurationExtensionMethods(IReadOnlyCollection<Assembly> configurationAssemblies, Type configType)
549550
{
550551
// ExtensionAttribute can be polyfilled to support extension methods
551-
bool HasExtensionAttribute(MethodInfo m) =>
552-
m.CustomAttributes.Any(a => a.AttributeType.FullName == "System.Runtime.CompilerServices.ExtensionAttribute");
552+
static bool HasCustomExtensionAttribute(MethodInfo m)
553+
{
554+
try
555+
{
556+
return m.CustomAttributes.Any(a => a.AttributeType.FullName == "System.Runtime.CompilerServices.ExtensionAttribute");
557+
}
558+
catch (CustomAttributeFormatException)
559+
{
560+
return false;
561+
}
562+
}
553563

554564
return configurationAssemblies
555565
.SelectMany(a => a.ExportedTypes
556566
.Select(t => t.GetTypeInfo())
557567
.Where(t => t.IsSealed && t.IsAbstract && !t.IsNested))
558568
.SelectMany(t => t.DeclaredMethods)
559-
.Where(m => m.IsStatic && m.IsPublic && HasExtensionAttribute(m))
569+
.Where(m => m.IsStatic && m.IsPublic && (m.IsDefined(typeof(ExtensionAttribute), false) || HasCustomExtensionAttribute(m)))
560570
.Where(m => m.GetParameters()[0].ParameterType == configType)
561571
.ToList();
562572
}

0 commit comments

Comments
 (0)