Skip to content

Commit 1461a51

Browse files
authored
Merge pull request #647 from Excel-DNA/2ALC
Added AssemblyLoadContext dependent search for already loaded assembly in .NET 6
2 parents bcf789f + 2654397 commit 1461a51

3 files changed

Lines changed: 22 additions & 5 deletions

File tree

Source/ExcelDna.Integration/ExternalLibrary.cs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -243,12 +243,24 @@ internal List<ExportedAssembly> GetAssemblies(string pathResolveRoot, DnaLibrary
243243
// But here we don't deal with .resources assemblies
244244
static Assembly GetAssemblyIfLoaded(string assemblyName)
245245
{
246-
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
247-
foreach (Assembly loadedAssembly in assemblies)
246+
IEnumerable<Assembly> assemblies = null;
247+
#if NETCOREAPP
248+
var alc = System.Runtime.Loader.AssemblyLoadContext.GetLoadContext(Assembly.GetExecutingAssembly());
249+
if (alc != null)
248250
{
249-
AssemblyName loadedAssemblyName = loadedAssembly.GetName();
250-
if (string.Equals(assemblyName, loadedAssemblyName.Name, StringComparison.OrdinalIgnoreCase))
251-
return loadedAssembly;
251+
assemblies = alc.Assemblies;
252+
}
253+
#else
254+
assemblies = AppDomain.CurrentDomain.GetAssemblies();
255+
#endif
256+
if (assemblies != null)
257+
{
258+
foreach (Assembly loadedAssembly in assemblies)
259+
{
260+
AssemblyName loadedAssemblyName = loadedAssembly.GetName();
261+
if (string.Equals(assemblyName, loadedAssemblyName.Name, StringComparison.OrdinalIgnoreCase))
262+
return loadedAssembly;
263+
}
252264
}
253265
return null;
254266
}

Source/ExcelDna.Integration/Logging.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ static void Close()
197197
IntegrationTraceSource.Close();
198198
IntegrationTraceSource = null;
199199
}
200+
201+
s_LoggingInitialized = false;
200202
}
201203

202204
}

Source/ExcelDna.ManagedHost/AddInInitialize.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ private static void UnloadALC()
6767
GC.Collect();
6868
GC.WaitForPendingFinalizers();
6969
}
70+
71+
if (alcWeakRef.IsAlive)
72+
Logger.Initialization.Warn("Failed to unload AssemblyLoadContext");
7073
}
7174

7275
private static WeakReference StartUnloadALC()

0 commit comments

Comments
 (0)