Esempio n. 1
0
        /// <summary>
        /// Reads the assembly from the given path, or else loads it from cache.
        /// </summary>
        /// <param name="path">The patch to read the assembly from.</param>
        /// <param name="readSymbols">Whether or not to read symbols.</param>
        /// <returns></returns>
        public AssemblyDefinition ReadAssembly(string path, bool readSymbols = false)
        {
            var fileInfo = new FileInfo(path);
            fileInfo.Refresh();
            if (_cache.ContainsKey(path)) {
                if (DoesCacheMatch(fileInfo, _cache[path].Metadata)) {
                    return _cache[path].Assembly;
                }
            }
            var defAssemblyResolver = new ExpandedAssemblyResolver();
            defAssemblyResolver.AddSearchDirectory(Path.GetDirectoryName(path));
            var rdrParams = new ReaderParameters() {
                AssemblyResolver = defAssemblyResolver,
                ReadSymbols = readSymbols
            };
            var read = AssemblyDefinition.ReadAssembly(path, rdrParams);
            var assemblyResolver = read.MainModule.AssemblyResolver as BaseAssemblyResolver;
            //Cecil doesn't add the assembly's original directory as a search path by default.
            var dir = Path.GetDirectoryName(path);

            var entry = new AssemblyCacheEntry() {
                Assembly = read,
                Metadata = new FileMetadata() {
                    Length = fileInfo.Length,
                    LastWriteTime = fileInfo.LastWriteTimeUtc,
                    CreationTime = fileInfo.CreationTimeUtc
                },
                Path = path
            };
            _cache[path] = entry;
            return read;
        }
Esempio n. 2
0
        private bool HasAnnotationInSideBySideFile([NotNull] ISymbol symbol, bool appliesToItem)
        {
            string path = AssemblyExternalAnnotationsLoader.GetPathForExternalSymbolOrNull(symbol);

            if (path != null)
            {
                AssemblyCacheEntry entry = assemblyCache.GetOrAdd(path, CreateAssemblyCacheEntry);
                return(entry.Map.Contains(symbol, appliesToItem));
            }

            return(false);
        }
Esempio n. 3
0
        /// <summary>
        /// Reads the assembly from the given path, or else loads it from cache.
        /// </summary>
        /// <param name="path">The patch to read the assembly from.</param>
        /// <param name="readSymbols">Whether or not to read symbols.</param>
        /// <returns></returns>
        public AssemblyDefinition ReadAssembly(string path, bool readSymbols = false)
        {
            var fileInfo = new FileInfo(path);

            fileInfo.Refresh();
            if (_cache.ContainsKey(path))
            {
                if (DoesCacheMatch(fileInfo, _cache[path].Metadata))
                {
                    return(_cache[path].Assembly);
                }
            }
            var defAssemblyResolver = new ExpandedAssemblyResolver();

            defAssemblyResolver.AddSearchDirectory(Path.GetDirectoryName(path));
            var rdrParams = new ReaderParameters()
            {
                AssemblyResolver = defAssemblyResolver,
                ReadSymbols      = readSymbols
            };
            var read             = AssemblyDefinition.ReadAssembly(path, rdrParams);
            var assemblyResolver = read.MainModule.AssemblyResolver as BaseAssemblyResolver;
            //Cecil doesn't add the assembly's original directory as a search path by default.
            var dir = Path.GetDirectoryName(path);


            var entry = new AssemblyCacheEntry()
            {
                Assembly = read,
                Metadata = new FileMetadata()
                {
                    Length        = fileInfo.Length,
                    LastWriteTime = fileInfo.LastWriteTimeUtc,
                    CreationTime  = fileInfo.CreationTimeUtc
                },
                Path = path
            };

            _cache[path] = entry;
            return(read);
        }
Esempio n. 4
0
 internal KnownAssemblyEntry(AssemblyCacheEntry cacheEntry, bool seenWithEdmItemCollection)
 {
     this._cacheEntry = cacheEntry;
     this.ReferencedAssembliesAreLoaded = false;
     this.SeenWithEdmItemCollection     = seenWithEdmItemCollection;
 }