diff --git a/packages.cake b/packages.cake
index 9a3fab11f0..1fffe48003 100644
--- a/packages.cake
+++ b/packages.cake
@@ -196,6 +196,7 @@ public class Packages
new NuSpecDependency() { Id = "System.Reactive", Version = SystemReactiveVersion },
//.NET Core
new NuSpecDependency() { Id = "System.Threading.ThreadPool", TargetFramework = "netcoreapp1.0", Version = "4.3.0" },
+ new NuSpecDependency() { Id = "Microsoft.Extensions.DependencyModel", TargetFramework = "netcoreapp1.0", Version = "1.1.0" },
new NuSpecDependency() { Id = "NETStandard.Library", TargetFramework = "netcoreapp1.0", Version = "1.6.0" },
new NuSpecDependency() { Id = "Microsoft.NETCore.Portable.Compatibility", TargetFramework = "netcoreapp1.0", Version = "1.0.1" },
new NuSpecDependency() { Id = "Splat", TargetFramework = "netcoreapp1.0", Version = SplatVersion },
diff --git a/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj b/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj
index 257e27b043..b75e5c10aa 100644
--- a/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj
+++ b/src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/src/Avalonia.DotNetCoreRuntime/NetCoreRuntimePlatform.cs b/src/Avalonia.DotNetCoreRuntime/NetCoreRuntimePlatform.cs
index b131488109..6aab8e0243 100644
--- a/src/Avalonia.DotNetCoreRuntime/NetCoreRuntimePlatform.cs
+++ b/src/Avalonia.DotNetCoreRuntime/NetCoreRuntimePlatform.cs
@@ -5,6 +5,8 @@ using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
+using Microsoft.DotNet.PlatformAbstractions;
+using Microsoft.Extensions.DependencyModel;
namespace Avalonia.Shared.PlatformSupport
{
@@ -15,33 +17,26 @@ namespace Avalonia.Shared.PlatformSupport
static Assembly[] LoadAssemblies()
{
+ var assemblies = new List();
+ // Mostly copy-pasted from (MIT):
+ // https://github.com/StefH/System.AppDomain.Core/blob/0b35e676c2721aa367b96e62eb52c97ee0b43a70/src/System.AppDomain.NetCoreApp/AppDomain.cs
- var rv = new List();
- var entry = Assembly.GetEntryAssembly();
- rv.Add(entry);
- var queue = new Queue(entry.GetReferencedAssemblies());
- var aset = new HashSet(queue.Select(r => r.ToString()));
-
- while (queue.Count > 0)
+ foreach (var assemblyName in
+ DependencyContext.Default.GetRuntimeAssemblyNames(RuntimeEnvironment.GetRuntimeIdentifier()))
{
- Assembly asm;
try
{
- asm = Assembly.Load(queue.Dequeue());
- }
- catch (Exception e)
- {
- Debug.Write(e.ToString());
- continue;
+ var assembly = Assembly.Load(assemblyName);
+ // just load all types and skip this assembly if one or more types cannot be resolved
+ assembly.DefinedTypes.ToArray();
+ assemblies.Add(assembly);
}
- rv.Add(asm);
- foreach (var r in asm.GetReferencedAssemblies())
+ catch (Exception ex)
{
- if (aset.Add(r.ToString()))
- queue.Enqueue(r);
+ Debug.Write(ex.Message);
}
}
- return rv.Distinct().ToArray();
+ return assemblies.ToArray();
}
}
}