Наследование: Mono.Cecil.DefaultAssemblyResolver
Пример #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;
        }
Пример #2
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);
        }