public static void ValidateLoadUnmanagedDll() { Console.WriteLine($"Running {nameof(ValidateLoadUnmanagedDll)}..."); ALC alc = new ALC(); var asm = alc.LoadFromAssemblyPath(Assembly.GetExecutingAssembly().Location); Console.WriteLine(" -- Validate explicit load..."); // ALC implementation returns a fake handle value IntPtr ptr = NativeLibrary.Load(FakeNativeLibrary.Name, asm, null); alc.Validate(FakeNativeLibrary.Name); Assert.Equal(FakeNativeLibrary.Handle, ptr); alc.Reset(); ptr = IntPtr.Zero; bool success = NativeLibrary.TryLoad(FakeNativeLibrary.Name, asm, null, out ptr); Assert.True(success, $"NativeLibrary.TryLoad should have succeeded"); alc.Validate(FakeNativeLibrary.Name); Assert.Equal(FakeNativeLibrary.Handle, ptr); alc.Reset(); // ALC implementation calls NativeLibrary.TryLoad with a different name ptr = NativeLibrary.Load(FakeNativeLibrary.RedirectName, asm, null); alc.Validate(FakeNativeLibrary.RedirectName, FakeNativeLibrary.Name); Assert.Equal(FakeNativeLibrary.Handle, ptr); alc.Reset(); ptr = IntPtr.Zero; success = NativeLibrary.TryLoad(FakeNativeLibrary.RedirectName, asm, null, out ptr); Assert.True(success, $"NativeLibrary.TryLoad should have succeeded"); alc.Validate(FakeNativeLibrary.RedirectName, FakeNativeLibrary.Name); Assert.Equal(FakeNativeLibrary.Handle, ptr); alc.Reset(); Console.WriteLine(" -- Validate p/invoke..."); int addend1 = rand.Next(int.MaxValue / 2); int addend2 = rand.Next(int.MaxValue / 2); int expected = addend1 + addend2; int value = NativeSumInAssemblyLoadContext(alc, addend1, addend2); alc.Validate(NativeLibraryToLoad.InvalidName); Assert.Equal(expected, value); }