示例#1
0
        internal Type FastBindToType(string assemblyName, string typeName)
        {
            Type type = null;

            ObjectReader.TypeNAssembly typeNAssembly = (ObjectReader.TypeNAssembly) this.typeCache.GetCachedValue(typeName);
            if (typeNAssembly == null || typeNAssembly.assemblyName != assemblyName)
            {
                Assembly assembly = null;
                if (this.bSimpleAssembly)
                {
                    try
                    {
                        ObjectReader.sfileIOPermission.Assert();
                        try
                        {
                            assembly = ObjectReader.ResolveSimpleAssemblyName(new AssemblyName(assemblyName));
                        }
                        finally
                        {
                            CodeAccessPermission.RevertAssert();
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                    if (assembly == null)
                    {
                        return(null);
                    }
                    ObjectReader.GetSimplyNamedTypeFromAssembly(assembly, typeName, ref type);
                }
                else
                {
                    try
                    {
                        ObjectReader.sfileIOPermission.Assert();
                        try
                        {
                            assembly = Assembly.Load(assemblyName);
                        }
                        finally
                        {
                            CodeAccessPermission.RevertAssert();
                        }
                    }
                    catch (Exception ex2)
                    {
                    }
                    if (assembly == null)
                    {
                        return(null);
                    }
                    type = FormatterServices.GetTypeFromAssembly(assembly, typeName);
                }
                if (type == null)
                {
                    return(null);
                }
                ObjectReader.CheckTypeForwardedTo(assembly, type.Assembly, type);
                typeNAssembly              = new ObjectReader.TypeNAssembly();
                typeNAssembly.type         = type;
                typeNAssembly.assemblyName = assemblyName;
                this.typeCache.SetCachedValue(typeNAssembly);
            }
            return(typeNAssembly.type);
        }