| | |
| | | { |
| | | public static class RuntimeExtension |
| | | { |
| | | private static readonly List<string> ProjectAssemblies =new() { "WIDESEAWCS" }; |
| | | /// <summary> |
| | | /// 获取项目程序集,排除所有的系统程序集(Microsoft.***、System.***等)、Nuget下载包 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static IList<Assembly> GetAllAssemblies() |
| | | { |
| | | var list = new List<Assembly>(); |
| | | var deps = DependencyContext.Default; |
| | | //只加载项目中的程序集 |
| | | var libs = deps.CompileLibraries.Where(lib => !lib.Serviceable && lib.Type == "project"); //排除所有的系统程序集、Nuget下载包 |
| | | foreach (var lib in libs) |
| | | var assemblies = new List<Assembly>(); |
| | | var dllFiles = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll"); |
| | | |
| | | foreach (var dllFile in dllFiles) |
| | | { |
| | | var fileName = Path.GetFileNameWithoutExtension(dllFile); |
| | | if (!ProjectAssemblies.Any(s => fileName.StartsWith(s))) continue; |
| | | try |
| | | { |
| | | var assembly = AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(lib.Name)); |
| | | list.Add(assembly); |
| | | var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(dllFile); |
| | | assemblies.Add(assembly); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | //Log.Debug(e, "GetAllAssemblies Exception:{ex}", e.Message); |
| | | Console.WriteLine($"Failed to load assembly: {fileName}. Error: {e.Message}"); |
| | | } |
| | | } |
| | | |
| | | return list; |
| | | return assemblies; |
| | | } |
| | | |
| | | public static Assembly GetAssembly(string assemblyName) |