/// <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; }
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); }
/// <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); }
internal KnownAssemblyEntry(AssemblyCacheEntry cacheEntry, bool seenWithEdmItemCollection) { this._cacheEntry = cacheEntry; this.ReferencedAssembliesAreLoaded = false; this.SeenWithEdmItemCollection = seenWithEdmItemCollection; }