コード例 #1
0
        public virtual AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if (parameters == null)
            {
                parameters = new ReaderParameters();
            }
            AssemblyDefinition assemblyDefinition = this.SearchDirectory(name, this.directories, parameters);

            if (assemblyDefinition != null)
            {
                return(assemblyDefinition);
            }
            if (name.IsRetargetable)
            {
                name = new AssemblyNameReference(name.Name, Mixin.ZeroVersion)
                {
                    PublicKeyToken = Empty <byte> .Array
                };
            }
            string directoryName = Path.GetDirectoryName(typeof(object).Module.FullyQualifiedName);

            if (BaseAssemblyResolver.IsZero(name.Version))
            {
                assemblyDefinition = this.SearchDirectory(name, new string[]
                {
                    directoryName
                }, parameters);
                if (assemblyDefinition != null)
                {
                    return(assemblyDefinition);
                }
            }
            if (name.Name == "mscorlib")
            {
                assemblyDefinition = this.GetCorlib(name, parameters);
                if (assemblyDefinition != null)
                {
                    return(assemblyDefinition);
                }
            }
            assemblyDefinition = this.GetAssemblyInGac(name, parameters);
            if (assemblyDefinition != null)
            {
                return(assemblyDefinition);
            }
            assemblyDefinition = this.SearchDirectory(name, new string[]
            {
                directoryName
            }, parameters);
            if (assemblyDefinition != null)
            {
                return(assemblyDefinition);
            }
            if (this.ResolveFailure != null)
            {
                assemblyDefinition = this.ResolveFailure(this, name);
                if (assemblyDefinition != null)
                {
                    return(assemblyDefinition);
                }
            }
            throw new AssemblyResolutionException(name);
        }
コード例 #2
0
        private AssemblyDefinition GetCorlib(AssemblyNameReference reference, ReaderParameters parameters)
        {
            Version      version = reference.Version;
            AssemblyName name    = typeof(object).Assembly.GetName();

            if (name.Version == version || BaseAssemblyResolver.IsZero(version))
            {
                return(this.GetAssembly(typeof(object).Module.FullyQualifiedName, parameters));
            }
            string path = Directory.GetParent(Directory.GetParent(typeof(object).Module.FullyQualifiedName).FullName).FullName;

            if (!BaseAssemblyResolver.on_mono)
            {
                switch (version.Major)
                {
                case 1:
                    if (version.MajorRevision == 3300)
                    {
                        path = Path.Combine(path, "v1.0.3705");
                        goto IL_170;
                    }
                    path = Path.Combine(path, "v1.0.5000.0");
                    goto IL_170;

                case 2:
                    path = Path.Combine(path, "v2.0.50727");
                    goto IL_170;

                case 4:
                    path = Path.Combine(path, "v4.0.30319");
                    goto IL_170;
                }
                throw new NotSupportedException("Version not supported: " + version);
            }
            if (version.Major == 1)
            {
                path = Path.Combine(path, "1.0");
            }
            else
            {
                if (version.Major == 2)
                {
                    if (version.MajorRevision == 5)
                    {
                        path = Path.Combine(path, "2.1");
                    }
                    else
                    {
                        path = Path.Combine(path, "2.0");
                    }
                }
                else
                {
                    if (version.Major != 4)
                    {
                        throw new NotSupportedException("Version not supported: " + version);
                    }
                    path = Path.Combine(path, "4.0");
                }
            }
IL_170:
            string text = Path.Combine(path, "mscorlib.dll");

            if (File.Exists(text))
            {
                return(this.GetAssembly(text, parameters));
            }
            return(null);
        }