public void Test1Impl()
        {
#if NETCOREAPP
            Console.WriteLine(typeof(IServiceTypeProvider));
            FieldInfo writeCoreHook = typeof(Debug).GetField("s_WriteCore", BindingFlags.Static | BindingFlags.NonPublic);
            writeCoreHook.SetValue(null, new Action <string>((s) => Console.WriteLine(s)));
#else
            Debug.Listeners.Add(new ConsoleTraceListener());
#endif
            // First use our test logger to verify the output
            //var originalWriteCoreHook = writeCoreHook.GetValue(null);
            //writeCoreHook.SetValue(null, new Action<string>(WriteLogger.s_instance.WriteCore));
            //Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
            //netcore3.0 SetProvider(DebugProvider provider)

            var assemblies = new AssemblyLoaderBuilder()
                             .UseLoadedAssemblies()
                             .Directories(System.IO.Path.GetDirectoryName(
                                              typeof(Tests).Assembly.Location))
                             .Load();
#if !FODY
            ILMerge.AutoResolveMergedAssemblies.AutoResolverInstaller.EnsureInstalled();
#endif
            assemblies = assemblies
                         .Where(z => !z.GetName()
                                .Name.StartsWith("nunit", StringComparison.OrdinalIgnoreCase))
                         .ToArray();

            var provider = new PluginServiceTypeProvider(assemblies);
            var types    = provider.GetServiceTypes <BaseClass>().ToArray();
            Console.WriteLine();
            Console.WriteLine(string.Join("\r\n", types.Select(z => z.FullName)));
            Assert.AreEqual(1, types.Length);
            Assert.AreEqual("DerivedClass", types[0].Name);
        }
        static void Main(string[] args)
        {
#if FODY
#if !NETCOREAPP
            CosturaUtility.Initialize();
#endif
#else
            AutoResolverInstaller.EnsureInstalled();
#endif

            var assemblies = new AssemblyLoaderBuilder()
                             .UseLoadedAssemblies()
                             .Directories(AppDomain.CurrentDomain.BaseDirectory)
                             .Load();
            foreach (var a in assemblies)
            {
                Console.WriteLine(a.FullName);
            }
            var serviceProvider = new PluginServiceTypeProvider(assemblies);
            Console.WriteLine("bs :{0}", typeof(BaseClass).FullName);
            AppDomain.CurrentDomain.FirstChanceException += (a, b) =>
            {
                Console.WriteLine(b.Exception);
                if (b.Exception is System.Reflection.ReflectionTypeLoadException rte)
                {
                    foreach (var ex in rte.LoaderExceptions)
                    {
                        Console.WriteLine(ex);
                    }
                }
            };
            var types = serviceProvider.GetServiceTypes <BaseClass>().ToArray();
            Console.WriteLine(Activator.CreateInstance(types[0]));
        }