Skip to content

Commit 0267fe1

Browse files
committed
Fix issue where Assembly.Load breaks if dll is unreferenced
1 parent e0b845c commit 0267fe1

5 files changed

Lines changed: 10 additions & 10 deletions

File tree

src/Serilog.Settings.Configuration/Settings/Configuration/Assemblies/AssemblyFinder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace Serilog.Settings.Configuration.Assemblies;
55

66
abstract class AssemblyFinder
77
{
8-
public abstract IReadOnlyList<AssemblyName> FindAssembliesContainingName(string nameToFind);
8+
public abstract IReadOnlyList<(AssemblyName, string?)> FindAssembliesContainingName(string nameToFind);
99

1010
protected static bool IsCaseInsensitiveMatch(string? text, string textToFind)
1111
{

src/Serilog.Settings.Configuration/Settings/Configuration/Assemblies/CompositeAssemblyFinder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ public CompositeAssemblyFinder(params AssemblyFinder[] assemblyFinders)
1111
_assemblyFinders = assemblyFinders;
1212
}
1313

14-
public override IReadOnlyList<AssemblyName> FindAssembliesContainingName(string nameToFind)
14+
public override IReadOnlyList<(AssemblyName, string?)> FindAssembliesContainingName(string nameToFind)
1515
{
16-
var assemblyNames = new List<AssemblyName>();
16+
var assemblyNames = new List<(AssemblyName, string?)>();
1717
foreach (var assemblyFinder in _assemblyFinders)
1818
{
1919
assemblyNames.AddRange(assemblyFinder.FindAssembliesContainingName(nameToFind));

src/Serilog.Settings.Configuration/Settings/Configuration/Assemblies/DependencyContextAssemblyFinder.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ public DependencyContextAssemblyFinder(DependencyContext? dependencyContext)
1212
_dependencyContext = dependencyContext;
1313
}
1414

15-
public override IReadOnlyList<AssemblyName> FindAssembliesContainingName(string nameToFind)
15+
public override IReadOnlyList<(AssemblyName, string?)> FindAssembliesContainingName(string nameToFind)
1616
{
1717
if (_dependencyContext == null)
18-
return Array.Empty<AssemblyName>();
18+
return Array.Empty<(AssemblyName, string?)>();
1919

2020
var query = from library in _dependencyContext.RuntimeLibraries
2121
where IsReferencingSerilog(library)
2222
from assemblyName in library.GetDefaultAssemblyNames(_dependencyContext)
2323
where IsCaseInsensitiveMatch(assemblyName.Name, nameToFind)
24-
select assemblyName;
24+
select (assemblyName, (string?)null);
2525

2626
return query.ToList();
2727

src/Serilog.Settings.Configuration/Settings/Configuration/Assemblies/DllScanningAssemblyFinder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ namespace Serilog.Settings.Configuration.Assemblies;
44

55
sealed class DllScanningAssemblyFinder : AssemblyFinder
66
{
7-
public override IReadOnlyList<AssemblyName> FindAssembliesContainingName(string nameToFind)
7+
public override IReadOnlyList<(AssemblyName, string?)> FindAssembliesContainingName(string nameToFind)
88
{
99
var probeDirs = new List<string>();
1010

@@ -46,7 +46,7 @@ from outputAssemblyPath in Directory.GetFiles(probeDir, "*.dll")
4646
where IsCaseInsensitiveMatch(assemblyFileName, nameToFind)
4747
let assemblyName = TryGetAssemblyNameFrom(outputAssemblyPath)
4848
where assemblyName != null
49-
select assemblyName;
49+
select (assemblyName, outputAssemblyPath);
5050

5151
return query.ToList();
5252

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,9 +355,9 @@ static IReadOnlyCollection<Assembly> LoadConfigurationAssemblies(IConfiguration
355355
}
356356
}
357357

358-
foreach (var assemblyName in assemblyFinder.FindAssembliesContainingName("serilog"))
358+
foreach (var (assemblyName, path) in assemblyFinder.FindAssembliesContainingName("serilog"))
359359
{
360-
var assumed = Assembly.Load(assemblyName);
360+
var assumed = path == null ? Assembly.Load(assemblyName) : Assembly.LoadFrom(path);
361361
assemblies.Add(assumed);
362362
}
363363

0 commit comments

Comments
 (0)