Merge branch 'dotnet7' of https://github.com/GoaLitiuM/FlaxEngine into GoaLitiuM-dotnet7

This commit is contained in:
Wojciech Figat
2023-01-12 15:15:40 +01:00
6 changed files with 33 additions and 33 deletions

View File

@@ -35,11 +35,8 @@ namespace FlaxEngine
return null;
var dataTypeName = DataTypeName;
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
// Going through the assemblies in order will return collected assemblies first,
// use reverse order instead to find the type currently loaded assemblies instead.
for (int i = assemblies.Length-1; i >= 0; i--)
var assemblies = Utils.GetAssemblies();
for (int i = 0; i < assemblies.Length; i++)
{
var assembly = assemblies[i];
if (assembly != null)

View File

@@ -1038,7 +1038,7 @@ namespace FlaxEngine
private static Dictionary<string, IntPtr> loadedNativeLibraries = new();
private static Dictionary<string, string> nativeLibraryPaths = new();
private static Dictionary<Assembly, string> assemblyOwnedNativeLibraries = new();
private static AssemblyLoadContext scriptingAssemblyLoadContext;
internal static AssemblyLoadContext scriptingAssemblyLoadContext;
[System.Diagnostics.DebuggerStepThrough]
private static IntPtr NativeLibraryImportResolver(string libraryName, Assembly assembly, DllImportSearchPath? dllImportSearchPath)
@@ -2453,7 +2453,7 @@ namespace FlaxEngine
// This assembly was already loaded when initializing the host context
firstAssemblyLoaded = true;
Assembly flaxEngineAssembly = AppDomain.CurrentDomain.GetAssemblies().First(x => x.GetName().Name == "FlaxEngine.CSharp");
Assembly flaxEngineAssembly = AssemblyLoadContext.Default.Assemblies.First(x => x.GetName().Name == "FlaxEngine.CSharp");
*assemblyName = NativeAllocStringAnsi(flaxEngineAssembly.GetName().Name);
*assemblyFullName = NativeAllocStringAnsi(flaxEngineAssembly.FullName);
return GetAssemblyHandle(flaxEngineAssembly);
@@ -2476,7 +2476,7 @@ namespace FlaxEngine
// This assembly was already loaded when initializing the host context
firstAssemblyLoaded = true;
Assembly flaxEngineAssembly = AppDomain.CurrentDomain.GetAssemblies().First(x => x.GetName().Name == "FlaxEngine.CSharp");
Assembly flaxEngineAssembly = AssemblyLoadContext.Default.Assemblies.First(x => x.GetName().Name == "FlaxEngine.CSharp");
*assemblyName = NativeAllocStringAnsi(flaxEngineAssembly.GetName().Name);
*assemblyFullName = NativeAllocStringAnsi(flaxEngineAssembly.FullName);
return GetAssemblyHandle(flaxEngineAssembly);
@@ -2517,13 +2517,9 @@ namespace FlaxEngine
internal static ManagedHandle GetAssemblyByName(IntPtr name_, IntPtr* assemblyName, IntPtr* assemblyFullName)
{
string name = Marshal.PtrToStringAnsi(name_);
Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(x => x.GetName().Name == name);
Assembly assembly = Utils.GetAssemblies().FirstOrDefault(x => x.GetName().Name == name);
if (assembly == null)
{
assembly = scriptingAssemblyLoadContext.Assemblies.FirstOrDefault(x => x.GetName().Name == name);
if (assembly == null)
return new ManagedHandle();
}
return new ManagedHandle();
*assemblyName = NativeAllocStringAnsi(assembly.GetName().Name);
*assemblyFullName = NativeAllocStringAnsi(assembly.FullName);
@@ -2593,14 +2589,9 @@ namespace FlaxEngine
internal static ManagedHandle GetAssemblyObject(IntPtr assemblyName_)
{
string assemblyName = Marshal.PtrToStringAnsi(assemblyName_);
Assembly assembly = null;
assembly = scriptingAssemblyLoadContext.Assemblies.FirstOrDefault(x => x.FullName == assemblyName);
Assembly assembly = Utils.GetAssemblies().FirstOrDefault(x => x.FullName == assemblyName);
if (assembly == null)
{
assembly = System.AppDomain.CurrentDomain.GetAssemblies().First(x => x.FullName == assemblyName);
if (assembly == null)
return new ManagedHandle();
}
return new ManagedHandle();
return ManagedHandle.Alloc(assembly);
}
@@ -2864,7 +2855,7 @@ namespace FlaxEngine
// We need private types of this assembly too, DefinedTypes contains a lot of types from other assemblies...
var types = referencedTypes.Any() ? assembly.DefinedTypes.Where(x => !referencedTypes.Contains(x.FullName)).ToArray() : assembly.DefinedTypes.ToArray();
Assert.IsTrue(AppDomain.CurrentDomain.GetAssemblies().Where(x => x.GetName().Name == "FlaxEngine.CSharp").Count() == 1);
Assert.IsTrue(Utils.GetAssemblies().Where(x => x.GetName().Name == "FlaxEngine.CSharp").Count() == 1);
return types;
}

View File

@@ -5,9 +5,8 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.Marshalling;
using System.Runtime.Loader;
namespace FlaxEngine
{
@@ -184,6 +183,19 @@ namespace FlaxEngine
return true;
}
/// <summary>
/// Gets all currently loaded assemblies in the runtime.
/// </summary>
/// <returns>List of assemblies</returns>
public static Assembly[] GetAssemblies()
{
#if USE_NETCORE
return AssemblyLoadContext.Default.Assemblies.Concat(NativeInterop.scriptingAssemblyLoadContext.Assemblies).ToArray();
#else
return AppDomain.CurrentDomain.GetAssemblies();
#endif
}
/// <summary>
/// Gets the assembly with the given name.
/// </summary>
@@ -191,7 +203,7 @@ namespace FlaxEngine
/// <returns>The assembly or null if not found.</returns>
public static Assembly GetAssemblyByName(string name)
{
return GetAssemblyByName(name, AppDomain.CurrentDomain.GetAssemblies());
return GetAssemblyByName(name, GetAssemblies());
}
/// <summary>