Example #1
0
        /// <summary>
        /// Tries to locate the assembly containing <see cref="object"/>.
        /// </summary>
        public bool TryGetSystemRuntimeAssemblyInformation(MetadataReader reader, out AssemblyReferenceInformation assemblyReference)
        {
            if (reader.TryGetCurrentAssemblyName(out var name) && SystemObjectAssemblies.Contains(name))
            {
                assemblyReference = reader.FormatAssemblyInfo();
                return(true);
            }

            var microsoftAssemblies = reader.AssemblyReferences
                                      .Select(handle =>
            {
                var assembly = reader.GetAssemblyReference(handle);
                return(reader.FormatAssemblyInfo(assembly));
            })
                                      .Where(_assemblyFilter.IsFrameworkAssembly)
                                      .Where(assembly => SystemObjectAssemblies.Contains(assembly.Name))
                                      .OrderByDescending(assembly => assembly.Version);

            var matchingAssembly = microsoftAssemblies.FirstOrDefault();

            if (matchingAssembly != default(AssemblyReferenceInformation))
            {
                assemblyReference = matchingAssembly;
                return(true);
            }

            assemblyReference = null;
            return(false);
        }
Example #2
0
 private MemberDependency CreateMemberDependency(MemberMetadataInfo type)
 {
     return(new MemberDependency
     {
         CallingAssembly = CallingAssembly,
         MemberDocId = $"T:{type}",
         DefinedInAssemblyIdentity = type.DefinedInAssembly.HasValue ? _reader.FormatAssemblyInfo(type.DefinedInAssembly.Value) : _currentAssemblyInfo
     });
 }
Example #3
0
        /// <summary>
        /// Add all assemblies that were referenced to the referenced assembly dictionary.  By default,
        /// we add every referenced assembly and will remove the ones that are actually referenced when
        /// all submitted assemblies are processed.
        /// </summary>
        /// <param name="metadataReader"></param>
        private void AddReferencedAssemblies(MetadataReader metadataReader)
        {
            var assemblyReferences = metadataReader.AssemblyReferences
                                     .Select(metadataReader.GetAssemblyReference)
                                     .Select(metadataReader.FormatAssemblyInfo);

            var assemblyName = metadataReader.FormatAssemblyInfo();

            foreach (var reference in assemblyReferences)
            {
                _unresolvedAssemblies.AddOrUpdate(
                    reference.ToString(),
                    new HashSet <string>(StringComparer.Ordinal)
                {
                    assemblyName.ToString()
                },
                    (key, existing) =>
                {
                    lock (existing)
                    {
                        existing.Add(assemblyName.ToString());
                    }

                    return(existing);
                });
            }
        }
Example #4
0
        private MemberDependency CreateMemberDependency(MemberMetadataInfo type)
        {
            var definedInAssembly = type.DefinedInAssembly.HasValue ? _reader.FormatAssemblyInfo(type.DefinedInAssembly.Value) : _currentAssemblyInfo;

            // Apply heuristic to determine if API is most likely defined in a framework assembly
            if (!_assemblyFilter.IsFrameworkAssembly(definedInAssembly))
            {
                return(null);
            }

            return(new MemberDependency
            {
                CallingAssembly = CallingAssembly,
                MemberDocId = $"T:{type}",
                DefinedInAssemblyIdentity = definedInAssembly
            });
        }
Example #5
0
        public static AssemblyInfo GetAssemblyInfo(this MetadataReader metadataReader, string filePath)
        {
            var fileInfo = FileVersionInfo.GetVersionInfo(filePath);

            return(new AssemblyInfo
            {
                AssemblyIdentity = metadataReader.FormatAssemblyInfo(),
                FileVersion = fileInfo.FileVersion ?? string.Empty,
                TargetFrameworkMoniker = metadataReader.GetTargetFrameworkMoniker() ?? string.Empty
            });
        }
Example #6
0
        public DependencyFinderEngineHelper(MetadataReader metadataReader, string assemblyPath)
        {
            _reader           = metadataReader;
            _assemblyLocation = assemblyPath;

            MemberDependency = new List <MemberDependency>();
            CallingAssembly  = _reader.GetAssemblyInfo(assemblyPath);

            // Get assembly info
            var assemblyDefinition = _reader.GetAssemblyDefinition();

            _currentAssemblyInfo = _reader.FormatAssemblyInfo(assemblyDefinition);
            _currentAssemblyName = _reader.GetString(assemblyDefinition.Name);
        }
Example #7
0
        private IList <AssemblyReferenceInformation> ComputeAssemblyReferences(MetadataReader metadataReader)
        {
            var refs = new List <AssemblyReferenceInformation>();

            foreach (var handle in _reader.AssemblyReferences)
            {
                try
                {
                    var entry = _reader.GetAssemblyReference(handle);

                    refs.Add(metadataReader.FormatAssemblyInfo(entry));
                }
                catch (BadImageFormatException)
                {
                }
            }

            return(refs);
        }
        public DependencyFinderEngineHelper(IDependencyFilter assemblyFilter, MetadataReader metadataReader, IAssemblyFile file)
        {
            _assemblyFilter   = assemblyFilter;
            _reader           = metadataReader;
            _assemblyLocation = file.Name;

            MemberDependency = new List <MemberDependency>();
            CallingAssembly  = new AssemblyInfo
            {
                AssemblyIdentity       = metadataReader.FormatAssemblyInfo().ToString(),
                FileVersion            = file.Version ?? string.Empty,
                TargetFrameworkMoniker = metadataReader.GetTargetFrameworkMoniker() ?? string.Empty
            };

            // Get assembly info
            var assemblyDefinition = _reader.GetAssemblyDefinition();

            _currentAssemblyInfo = _reader.FormatAssemblyInfo(assemblyDefinition);
            _currentAssemblyName = _reader.GetString(assemblyDefinition.Name);
        }
        /// <summary>
        /// Tries to locate the assembly containing <see cref="object"/>.
        /// </summary>
        public AssemblyReferenceInformation GetSystemRuntimeAssemblyInformation(MetadataReader reader)
        {
            var microsoftAssemblies = reader.AssemblyReferences
                                      .Select(handle =>
            {
                var assembly = reader.GetAssemblyReference(handle);
                return(reader.FormatAssemblyInfo(assembly));
            })
                                      .Where(_assemblyFilter.IsFrameworkAssembly)
                                      .Where(assembly => s_systemObjectAssemblies.Contains(assembly.Name))
                                      .OrderByDescending(assembly => assembly.Version);

            var matchingAssembly = microsoftAssemblies.FirstOrDefault();

            if (matchingAssembly != default(AssemblyReferenceInformation))
            {
                return(matchingAssembly);
            }
            else
            {
                throw new SystemObjectNotFoundException(microsoftAssemblies);
            }
        }
Example #10
0
        public static AssemblyReferenceInformation FormatAssemblyInfo(this MetadataReader metadataReader, AssemblyDefinition assemblyDefinition)
        {
            var name = metadataReader.GetString(assemblyDefinition.Name);

            return(metadataReader.FormatAssemblyInfo(name, assemblyDefinition.Culture, assemblyDefinition.PublicKey, assemblyDefinition.Version));
        }
Example #11
0
        public static AssemblyReferenceInformation FormatAssemblyInfo(this MetadataReader metadataReader, AssemblyReference assemblyReference)
        {
            var name = metadataReader.GetString(assemblyReference.Name);

            return(metadataReader.FormatAssemblyInfo(name, assemblyReference.Culture, assemblyReference.PublicKeyOrToken, assemblyReference.Version));
        }
Example #12
0
 public static AssemblyReferenceInformation FormatAssemblyInfo(this MetadataReader metadataReader)
 {
     return(metadataReader.FormatAssemblyInfo(metadataReader.GetAssemblyDefinition()));
 }
 private AssemblyReferenceInformation GetAssembly(MemberMetadataInfo type)
 {
     return(type.DefinedInAssembly.HasValue ? _reader.FormatAssemblyInfo(type.DefinedInAssembly.Value) : _currentAssemblyInfo);
 }
Example #14
0
 public static string FormatAssemblyInfo(this MetadataReader metadataReader)
 {
     return(metadataReader.FormatAssemblyInfo(metadataReader.GetAssemblyDefinition()));
 }