static ChallengeBase LoadChallenge(FileEntry entry, CollectibleAssemblyLoadContext context) { using var fs = entry.Open(FileMode.Open, FileAccess.Read); var assembly = context.LoadFromStream(fs); return(assembly .GetTypes() .Where(t => !t.IsAbstract && typeof(ChallengeBase).IsAssignableFrom(t)) .Select(t => (ChallengeBase)Activator.CreateInstance(t) !) .First()); }
private static Dictionary <int, ChallengeBase> LoadChallenges() { var context = new CollectibleAssemblyLoadContext(); var fs = new PhysicalFileSystem(); UPath basePath = fs.ConvertPathFromInternal(AppDomain.CurrentDomain.BaseDirectory); var challenges = fs.EnumerateFileEntries(basePath, "Day*.dll") .Select(entry => LoadChallenge(entry, context)) .ToDictionary(k => k.Day, v => v); return(challenges);