Example #1
0
        public MemoryAssemblyMembersCache(IAssemblyCache assemblyCache)
        {
            _assemblyCache = assemblyCache;
            AppDomain.CurrentDomain.AssemblyResolve += (object?sender, ResolveEventArgs args) =>
            {
                var task = assemblyCache.WaitFor(args.RequestingAssembly.FullName, 20000);
                task.Wait();

                var item = task.Result;
                if (item != null)
                {
                    //AppDomain.CurrentDomain.LO
                    var fullName = item.FullName;

                    var refs = item.GetReferencedAssemblies();
                    foreach (var @ref in refs)
                    {
                        if (AssemblyUtils.IsSystemAssembly(@ref) || AssemblyUtils.IsOskAssembly(@ref))
                        {
                            continue;
                        }
                        var asmDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                        var assembly     = Assembly.LoadFile(Path.Combine(asmDirectory, $"{@ref.Name}.dll"));
                        //var types = assembly.GetTypes();
                        //foreach (var type in types)
                        //{
                        //    try
                        //    {
                        //        var tobj = Activator.CreateInstance(type);
                        //        if (tobj != default)
                        //            break;
                        //    }
                        //    catch (Exception)
                        //    {
                        //        // ignore
                        //    }
                        //}
                    }

                    return(item);
                }

                return(null);
            };
        }