/// <summary> /// Loads into an isolated AssemblyLoadContext an assembly that has already been loaded into memory by the OS loader as a native module. /// </summary> /// <param name="moduleHandle">The native module handle for the assembly.</param> /// <param name="assemblyPath">The path to the assembly (as a pointer to a UTF-16 C string).</param> public static unsafe void LoadInMemoryAssembly(IntPtr moduleHandle, IntPtr assemblyPath) { // We don't cache the ALCs here since each IJW assembly will call this method at most once // (the load process rewrites the stubs that call here to call the actual methods they're supposed to) AssemblyLoadContext context = new IsolatedComponentLoadContext(Marshal.PtrToStringUni(assemblyPath)); context.LoadFromInMemoryModule(moduleHandle); }
public static unsafe void LoadInMemoryAssembly(IntPtr moduleHandle, IntPtr assemblyPath) { string?assemblyPathString = Marshal.PtrToStringUni(assemblyPath); if (assemblyPathString == null) { throw new ArgumentOutOfRangeException(nameof(assemblyPath)); } // We don't cache the ALCs here since each IJW assembly will call this method at most once // (the load process rewrites the stubs that call here to call the actual methods they're supposed to) AssemblyLoadContext context = new IsolatedComponentLoadContext(assemblyPathString); context.LoadFromInMemoryModule(moduleHandle); }
/// <summary> /// Loads into an isolated AssemblyLoadContext an assembly that has already been loaded into memory by the OS loader as a native module. /// </summary> /// <param name="moduleHandle">The native module handle for the assembly.</param> /// <param name="assemblyPath">The path to the assembly (as a pointer to a UTF-16 C string).</param> public static unsafe void LoadInMemoryAssembly(IntPtr moduleHandle, IntPtr assemblyPath) { #if TARGET_WINDOWS if (!IsSupported) { throw new NotSupportedException("This API is not enabled in trimmed scenarios. see https://aka.ms/dotnet-illink/nativehost for more details"); } string?assemblyPathString = Marshal.PtrToStringUni(assemblyPath); if (assemblyPathString == null) { throw new ArgumentOutOfRangeException(nameof(assemblyPath)); } // We don't cache the ALCs here since each IJW assembly will call this method at most once // (the load process rewrites the stubs that call here to call the actual methods they're supposed to) AssemblyLoadContext context = new IsolatedComponentLoadContext(assemblyPathString); context.LoadFromInMemoryModule(moduleHandle); #else throw new PlatformNotSupportedException(); #endif }