Example #1
0
            public Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
            {
                var domain = sender as AppDomain;

                this.Logger.Trace("Domain " + domain.FriendlyName
                                  + " resolving assembly " + args.Name
                                  + " requested by " + (args.RequestingAssembly != null ? args.RequestingAssembly.FullName : "none")
                                  + " ...");

                AssemblyName askedAssembly  = new AssemblyName(args.Name);
                Assembly     assemblyLoaded = null;

                if (Plugins.assemblyBindings.ContainsKey(askedAssembly.Name))
                {
                    assemblyLoaded = AssemblyResolver.CheckIfFullAssemblyLoaded(Plugins.assemblyBindings[askedAssembly.Name], domain);
                }
                else
                {
                    assemblyLoaded = AssemblyResolver.CheckIfAssemblyLoaded(askedAssembly.Name, domain);
                }

                if (assemblyLoaded != null)
                {
                    this.Logger.Trace("Resolved for " + assemblyLoaded.FullName + " in the loaded domain assemblies");
                    return(assemblyLoaded);
                }

                this.Logger.Trace("Did not find the assembly " + args.Name + " in the loaded domain assemblies");

                if (args.RequestingAssembly != null)
                {
                    assemblyLoaded = Plugins.LoadAssemblyFromResources(this.Logger, args.RequestingAssembly, askedAssembly);

                    if (assemblyLoaded != null)
                    {
                        this.Logger.Trace("Resolved for " + assemblyLoaded.FullName + " in " + args.RequestingAssembly.FullName + " resources");
                        return(assemblyLoaded);
                    }

                    assemblyLoaded = this.CheckAssemblyBinding(askedAssembly.Name);

                    if (assemblyLoaded != null)
                    {
                        this.Logger.Trace("Resolved for " + assemblyLoaded.FullName);
                        return(assemblyLoaded);
                    }

                    this.Logger.Trace("Did not resolve assembly " + args.Name + " in " + args.RequestingAssembly.FullName + " resources");
                }
                else
                {
                    assemblyLoaded = this.CheckAssemblyBinding(askedAssembly.Name);

                    if (assemblyLoaded != null)
                    {
                        this.Logger.Trace("Resolved for " + assemblyLoaded.FullName);
                        return(assemblyLoaded);
                    }

                    this.Logger.Trace("Did not resolve assembly " + args.Name + ". Requesting assembly is null. Will not try to load the asked assembly in resources");
                }

                return(null);
            }