// Derived type's Load implementation is expected to use one of the LoadFrom* methods to get the assembly
// which is a RuntimeAssembly instance. However, since Assembly type can be used build any other artifact (e.g. AssemblyBuilder),
// we need to check for RuntimeAssembly.
- RuntimeAssembly? rtLoadedAssembly = assembly as RuntimeAssembly;
+ RuntimeAssembly? rtLoadedAssembly = GetRuntimeAssembly(assembly);
if (rtLoadedAssembly != null)
{
loadedSimpleName = rtLoadedAssembly.GetSimpleName();
// The .NET Foundation licenses this file to you under the MIT license.
using System;
using System.Reflection;
+using System.Reflection.Emit;
using System.Runtime.Loader;
using System.IO;
+using System.Linq;
+using My;
namespace My
{
}
}
+ public static void GetLoadContextForDynamicAssembly(bool isCollectible)
+ {
+ try
+ {
+ Console.WriteLine($"{nameof(GetLoadContextForDynamicAssembly)}; isCollectible={isCollectible}");
+
+ AssemblyLoadContext alc = new AssemblyLoadContext($"ALC - {isCollectible}", isCollectible);
+ AssemblyBuilder assemblyBuilder;
+ AssemblyName assemblyName = new AssemblyName($"DynamicAssembly_{Guid.NewGuid():N}");
+
+ using (alc.EnterContextualReflection())
+ {
+ assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndCollect);
+ }
+
+ AssemblyLoadContext? context = AssemblyLoadContext.GetLoadContext(assemblyBuilder);
+
+ Assert(context != null);
+ Assert(alc == context);
+ Assert(alc.Assemblies.Any(a => AssemblyName.ReferenceMatchesDefinition(a.GetName(), assemblyName)));
+ }
+ catch (Exception e)
+ {
+ Assert(false, e.ToString());
+ }
+ }
+
public static int Main()
{
foreach (AssemblyLoadContext alc in AssemblyLoadContext.All)
AssemblyLoadByteArrayName();
CustomWOName();
CustomName();
+ GetLoadContextForDynamicAssembly(true);
+ GetLoadContextForDynamicAssembly(false);
foreach (AssemblyLoadContext alc in AssemblyLoadContext.All)
{