|
|
@ -5,6 +5,8 @@ using System.Linq; |
|
|
using System.Reflection; |
|
|
using System.Reflection; |
|
|
using System.Text; |
|
|
using System.Text; |
|
|
using System.Threading.Tasks; |
|
|
using System.Threading.Tasks; |
|
|
|
|
|
using Microsoft.DotNet.PlatformAbstractions; |
|
|
|
|
|
using Microsoft.Extensions.DependencyModel; |
|
|
|
|
|
|
|
|
namespace Avalonia.Shared.PlatformSupport |
|
|
namespace Avalonia.Shared.PlatformSupport |
|
|
{ |
|
|
{ |
|
|
@ -15,33 +17,26 @@ namespace Avalonia.Shared.PlatformSupport |
|
|
|
|
|
|
|
|
static Assembly[] LoadAssemblies() |
|
|
static Assembly[] LoadAssemblies() |
|
|
{ |
|
|
{ |
|
|
|
|
|
var assemblies = new List<Assembly>(); |
|
|
|
|
|
// Mostly copy-pasted from (MIT):
|
|
|
|
|
|
// https://github.com/StefH/System.AppDomain.Core/blob/0b35e676c2721aa367b96e62eb52c97ee0b43a70/src/System.AppDomain.NetCoreApp/AppDomain.cs
|
|
|
|
|
|
|
|
|
var rv = new List<Assembly>(); |
|
|
foreach (var assemblyName in |
|
|
var entry = Assembly.GetEntryAssembly(); |
|
|
DependencyContext.Default.GetRuntimeAssemblyNames(RuntimeEnvironment.GetRuntimeIdentifier())) |
|
|
rv.Add(entry); |
|
|
|
|
|
var queue = new Queue<AssemblyName>(entry.GetReferencedAssemblies()); |
|
|
|
|
|
var aset = new HashSet<string>(queue.Select(r => r.ToString())); |
|
|
|
|
|
|
|
|
|
|
|
while (queue.Count > 0) |
|
|
|
|
|
{ |
|
|
{ |
|
|
Assembly asm; |
|
|
|
|
|
try |
|
|
try |
|
|
{ |
|
|
{ |
|
|
asm = Assembly.Load(queue.Dequeue()); |
|
|
var assembly = Assembly.Load(assemblyName); |
|
|
} |
|
|
// just load all types and skip this assembly if one or more types cannot be resolved
|
|
|
catch (Exception e) |
|
|
assembly.DefinedTypes.ToArray(); |
|
|
{ |
|
|
assemblies.Add(assembly); |
|
|
Debug.Write(e.ToString()); |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
} |
|
|
rv.Add(asm); |
|
|
catch (Exception ex) |
|
|
foreach (var r in asm.GetReferencedAssemblies()) |
|
|
|
|
|
{ |
|
|
{ |
|
|
if (aset.Add(r.ToString())) |
|
|
Debug.Write(ex.Message); |
|
|
queue.Enqueue(r); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
return rv.Distinct().ToArray(); |
|
|
return assemblies.ToArray(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|