在AssemblyLoadContext中不显示共享程序集的集合,可能是因为共享程序集是由默认的AssemblyLoadContext加载的,而不是由自定义的AssemblyLoadContext加载的。默认的AssemblyLoadContext使用的是默认的AssemblyLoadContext.Default.LoadFromAssemblyName方法加载程序集,而不会显示在自定义的AssemblyLoadContext中。
要解决这个问题,可以使用以下代码示例创建一个自定义的AssemblyLoadContext,并在其中显示共享程序集的集合:
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.Loader;
public class CustomAssemblyLoadContext : AssemblyLoadContext
{
protected override Assembly Load(AssemblyName assemblyName)
{
// 加载程序集
Assembly assembly = Default.LoadFromAssemblyName(assemblyName);
// 显示加载的程序集
Console.WriteLine($"Loaded assembly: {assembly.FullName}");
return assembly;
}
}
public class Program
{
public static void Main(string[] args)
{
// 创建自定义的AssemblyLoadContext
CustomAssemblyLoadContext context = new CustomAssemblyLoadContext();
// 加载程序集
Assembly assembly = context.LoadFromAssemblyPath("path/to/your/assembly.dll");
// 打印加载的程序集的名称
Console.WriteLine($"Loaded assembly: {assembly.FullName}");
// 显示共享程序集的集合
List sharedAssemblies = new List();
foreach (Assembly loadedAssembly in context.Assemblies)
{
if (loadedAssembly.IsDynamic)
{
sharedAssemblies.Add(loadedAssembly);
}
}
Console.WriteLine("Shared assemblies:");
foreach (Assembly sharedAssembly in sharedAssemblies)
{
Console.WriteLine(sharedAssembly.FullName);
}
}
}
在这个示例中,我们创建了一个自定义的AssemblyLoadContext,并重写了Load方法来显示加载的程序集。然后,我们使用这个自定义的AssemblyLoadContext加载了一个程序集,并在控制台上打印了加载的程序集的名称。接下来,我们遍历自定义的AssemblyLoadContext中的程序集集合,找出共享程序集,并在控制台上打印了共享程序集的名称。
请注意,这个示例中的自定义AssemblyLoadContext仅用于演示目的。实际使用时,可能需要根据具体的需求进行修改和扩展。