Esempio n. 1
0
        private void WriteAssembly(ref int pos, IAssemblySignature assembly)
        {
            _blob.Write(ref pos, (byte)SignatureType.Assembly);
            WriteString(ref pos, assembly.Name);
            WriteString(ref pos, assembly.Culture);

            // Version
            var version = assembly.Version;

            if (version != null)
            {
                _blob.Write(ref pos, true);
                _blob.Write(ref pos, (ushort)version.Major);
                _blob.Write(ref pos, (ushort)version.Minor);
                _blob.Write(ref pos, (ushort)version.Build);
                _blob.Write(ref pos, (ushort)version.Revision);
            }
            else
            {
                _blob.Write(ref pos, false);
            }

            // PublicKeyToken
            var publicKeyToken = assembly.PublicKeyToken;

            if (publicKeyToken != null)
            {
                _blob.Write7BitEncodedInt(ref pos, publicKeyToken.Length);
                _blob.Write(ref pos, publicKeyToken);
            }
            else
            {
                _blob.Write(ref pos, (byte)0);
            }
        }
        public static string ToReflectionString(this IAssemblySignature assemblySig, SignaturePrintingFlags flags = SignaturePrintingFlags.None)
        {
            var printer = new ReflectionSignaturePrinter(flags);

            printer.PrintAssembly(assemblySig);

            return(printer.ToString());
        }
Esempio n. 3
0
        public int GetHashCode(IAssemblySignature obj)
        {
            int hashCode = 0x4000;

            if (obj.Name != null)
            {
                hashCode ^= obj.Name.GetHashCode();
            }

            return(hashCode);
        }
        protected bool ResolveGAC(IAssemblySignature assemblySig, out string foundPath)
        {
            string assemblyName;

            if (assemblySig.IsStrongNameSigned)
            {
                assemblyName = assemblySig.ToString();
            }
            else
            {
                assemblyName = assemblySig.Name;
            }

            return(ResolveGAC(assemblyName, out foundPath));
        }
        public IAssembly Resolve(IAssemblySignature assemblySig, IModule context, bool throwOnFailure = false)
        {
            var assembly = ResolveAssembly(assemblySig, context);

            if (assembly == null)
            {
                if (throwOnFailure)
                {
                    throw new ResolveReferenceException(string.Format(SR.AssemblyResolveError, assemblySig.ToReflectionString()));
                }

                return(null);
            }

            return(assembly);
        }
        protected override IAssembly ResolveAssembly(IAssemblySignature assemblySig, IModule context)
        {
            var key = new ResolveCacheKey()
            {
                Signature = assemblySig,
                Context   = context,
            };

            ICodeNode node;

            if (!_resolveCache.TryGetValue(key, out node))
            {
                node = base.ResolveAssembly(assemblySig, context);
                _resolveCache.Add(key, node);
            }

            return((IAssembly)node);
        }
        protected virtual IAssembly ResolveAssembly(IAssemblySignature assemblySig, string codeBase)
        {
            var assembly = GetAssembly(assemblySig);

            if (assembly != null)
            {
                return(assembly);
            }

            string foundPath;

            if (!ResolveAssemblyPath(assemblySig, codeBase, out foundPath))
            {
                return(null);
            }

            return(LoadAssembly(foundPath));
        }
        private IAssembly GetAssembly(IAssemblySignature assemblySig, bool throwIfMissing = false)
        {
            var comparer = SignatureComparer.Default;

            foreach (var assembly in _assemblyByLocation.Values)
            {
                if (comparer.Equals(assembly, assemblySig))
                {
                    return(assembly);
                }
            }

            if (throwIfMissing)
            {
                throw new ResolveReferenceException(string.Format(SR.AssemblyNotFound, assemblySig.ToString()));
            }

            return(null);
        }
        private bool EqualsTypeOwner(IAssemblySignature x, IModuleSignature y, IModule yModule)
        {
            if (!yModule.IsPrimeModule)
            {
                return(false);
            }

            if (y.Name != yModule.Name)
            {
                return(false);
            }

            if (!EqualsAssembly(x, (IAssemblySignature)yModule.Assembly))
            {
                return(false);
            }

            return(true);
        }
        protected bool ResolveAssemblyPath(IAssemblySignature assemblySig, string codeBase, out string foundPath)
        {
            bool resolveFromGAC = (!_resolveIgnoreGAC && assemblySig.IsStrongNameSigned);

            if (resolveFromGAC)
            {
                if (ResolveGAC(assemblySig, out foundPath))
                {
                    return(true);
                }
            }

            if (!_resolveIgnoreCodeBase && !string.IsNullOrEmpty(codeBase))
            {
                if (ResolveAssemblyFromPath(Path.GetDirectoryName(codeBase), assemblySig.Name, out foundPath))
                {
                    return(true);
                }

                foreach (string searchPath in _resolveSearchFolders)
                {
                    if (ResolveAssemblyFromPath(searchPath, assemblySig.Name, out foundPath))
                    {
                        return(true);
                    }
                }
            }

            if (resolveFromGAC)
            {
                if (ResolveGAC(assemblySig.Name, out foundPath))
                {
                    return(true);
                }
            }

            foundPath = null;
            return(false);
        }
Esempio n. 11
0
        public bool Equals(IAssemblySignature x, IAssemblySignature y)
        {
            if (x == y)
            {
                return(true);
            }

            if (x == null || y == null)
            {
                return(false);
            }

            if (x.Name != y.Name)
            {
                return(false);
            }

            if ((_flags & SignatureComparisonFlags.IgnoreAssemblyStrongName) != SignatureComparisonFlags.IgnoreAssemblyStrongName)
            {
                if (x.Culture != y.Culture)
                {
                    return(false);
                }

                if (!CompareUtils.Equals(x.Version, y.Version, true))
                {
                    return(false);
                }

                if (!CompareUtils.Equals(x.PublicKeyToken, y.PublicKeyToken))
                {
                    return(false);
                }
            }

            return(true);
        }
        private bool EqualsAssembly(IAssemblySignature x, IAssemblySignature y)
        {
            if (x == y)
            {
                return(true);
            }

            if (x == null || y == null)
            {
                return(false);
            }

            if (x.Name != y.Name)
            {
                return(false);
            }

            if (!CompareUtils.Equals(x.PublicKeyToken, y.PublicKeyToken))
            {
                return(false);
            }

            return(true);
        }
 public static DotNetFramework GetByMscorlib(IAssemblySignature mscorlib)
 {
     return(Get(GetFrameworkTypeByPublicKeyToken(mscorlib.PublicKeyToken), mscorlib.Version));
 }
 protected virtual IAssembly ResolveAssembly(IAssemblySignature assemblySig, IModule context)
 {
     return(ResolveAssembly(assemblySig, context.Location));
 }
 public static IAssembly Resolve(this IAssemblySignature assemblySig, IModule context, bool throwOnFailure = false)
 {
     return(context.AssemblyManager.Resolve(assemblySig, context, throwOnFailure));
 }
Esempio n. 16
0
        internal static void PrintAssembly(StringBuilder builder, IAssemblySignature assemblySig, SignaturePrintingFlags flags)
        {
            builder.Append(assemblySig.Name);

            if ((flags & SignaturePrintingFlags.IgnoreAssemblyStrongName) != SignaturePrintingFlags.IgnoreAssemblyStrongName)
            {
                bool ignoreDefaultValues = (flags & SignaturePrintingFlags.IgnoreAssemblyStrongNameDefaultValues) == SignaturePrintingFlags.IgnoreAssemblyStrongNameDefaultValues;

                // Version
                if (assemblySig.Version != null)
                {
                    builder.AppendFormat(", Version={0}", assemblySig.Version.ToString());
                }
                else if (!ignoreDefaultValues)
                {
                    builder.Append(", Version=0.0.0.0");
                }

                // Culture
                if (!string.IsNullOrEmpty(assemblySig.Culture))
                {
                    builder.AppendFormat(", Culture={0}", assemblySig.Culture);
                }
                else if (!ignoreDefaultValues)
                {
                    builder.Append(", Culture=neutral");
                }

                // PublicKeyToken
                if (assemblySig.PublicKeyToken != null && assemblySig.PublicKeyToken.Length > 0)
                {
                    builder.AppendFormat(", PublicKeyToken={0}", ConvertUtils.ToHexString(assemblySig.PublicKeyToken).ToLower());
                }
                else if (!ignoreDefaultValues)
                {
                    builder.Append(", PublicKeyToken=null");
                }

                // ProcessorArchitecture
                string procArchString;
                switch (assemblySig.ProcessorArchitecture)
                {
                case ProcessorArchitecture.MSIL:
                    procArchString = "msil";
                    break;

                case ProcessorArchitecture.X86:
                    procArchString = "x86";
                    break;

                case ProcessorArchitecture.Amd64:
                    procArchString = "amd64";
                    break;

                case ProcessorArchitecture.IA64:
                    procArchString = "ia64";
                    break;

                default:
                    procArchString = null;
                    break;
                }

                if (procArchString != null)
                {
                    builder.AppendFormat(", ProcessorArchitecture={0}", procArchString);
                }
            }
        }
 internal void PrintAssembly(IAssemblySignature assemblySig)
 {
     SignaturePrinter.PrintAssembly(_builder, assemblySig, _flags);
 }
Esempio n. 18
0
 public void PrintAssembly(IAssemblySignature assemblySig)
 {
     PrintAssembly(_builder, assemblySig, _flags);
 }