ACR_AssemblyLoader.AssemblyLoader.CurrentDomain_AssemblyResolve C# (CSharp) Method

CurrentDomain_AssemblyResolve() private method

This method attempts to resolve known assemblies on behalf of CLR scripts.
private CurrentDomain_AssemblyResolve ( object sender, ResolveEventArgs args ) : Assembly
sender object Supplies the sending object.
args System.ResolveEventArgs Supplies arguments.
return System.Reflection.Assembly
        Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            //
            // Search the known assembly cache for a match for the full name of
            // the assembly.  If no assembly is found, then null is returned.
            // If a matching assembly is found, then it is used to satisfy the
            // assembly resolution request.
            //

            Assembly Asm = KnownAssemblies.Where(x => x.FullName == args.Name).FirstOrDefault();

            if (Asm != null)
                return Asm;

            //
            // Some assemblies may depend on a compatibility search via an
            // app.config file.  Since these are not visible to the framework
            // for CLRScript assemblies, fall back to a loose search via same
            // assembly name and public key token.
            //

            AssemblyName SearchName = new AssemblyName(args.Name);

            Asm = KnownAssemblies.Where(x => x.GetName().Name == SearchName.Name && 
                x.GetName().CultureInfo.Name == SearchName.CultureInfo.Name &&
                x.GetName().Version >= SearchName.Version &&
                x.GetName().GetPublicKeyToken().SequenceEqual(SearchName.GetPublicKeyToken())).FirstOrDefault();

            if (Asm != null)
                return Asm;

            return null;
        }