public Mono.Cecil.AssemblyDefinition ResolveAssemblyByLocation(string referenceLocation, Mono.Cecil.ReaderParameters parameters) { if (referenceLocation == null) { return(null); } var assemblyName = Path.GetFileName(referenceLocation); var lastTimeWrite = File.GetLastWriteTime(referenceLocation); if (_assemblyCache.TryGetValue(assemblyName, out var cacheEntry)) { if (lastTimeWrite == cacheEntry.lastTimeWrite) { return(cacheEntry.assemblyDefinition); } } parameters.AssemblyResolver = this; using (var stream = new MemoryStream(File.ReadAllBytes(referenceLocation))) { var assemblyDefinition = Mono.Cecil.AssemblyDefinition.ReadAssembly(stream, parameters); cacheEntry.assemblyDefinition?.Dispose(); cacheEntry.assemblyDefinition = assemblyDefinition; cacheEntry.lastTimeWrite = lastTimeWrite; _assemblyCache[assemblyName] = cacheEntry; } return(cacheEntry.assemblyDefinition); }
public override Mono.Cecil.AssemblyDefinition Resolve(string fullName, Mono.Cecil.ReaderParameters parameters) { try { return(base.Resolve(fullName, parameters)); } catch { } return(null); }
/// <summary> /// Creates a Flame assembly resolver that forwards requests /// to a Mono.Cecil assembly resolver. /// </summary> /// <param name="resolver">The Mono.Cecil assembly resolver to use.</param> /// <param name="typeEnvironment">The Flame type environment to use when analyzing assemblies.</param> /// <param name="parameters">The Mono.Cecil reader parameters to use.</param> public CecilAssemblyResolver( Mono.Cecil.IAssemblyResolver resolver, TypeEnvironment typeEnvironment, Mono.Cecil.ReaderParameters parameters) { this.Resolver = resolver; this.Parameters = parameters; this.ReferenceResolver = new ReferenceResolver(this, typeEnvironment); }
public void LoadModule(System.IO.Stream dllStream, string dir, System.IO.Stream pdbStream) { Mono.Cecil.DefaultAssemblyResolver resolver = new Mono.Cecil.DefaultAssemblyResolver(); Mono.Cecil.ReaderParameters p = new Mono.Cecil.ReaderParameters(); p.AssemblyResolver = resolver; resolver.AddSearchDirectory(dir); this.module = Mono.Cecil.ModuleDefinition.ReadModule(dllStream, p); #if WITHPDB if (pdbStream != null) { var debugInfoLoader = new Mono.Cecil.Pdb.PdbReaderProvider(); module.ReadSymbols(debugInfoLoader.GetSymbolReader(module, pdbStream)); } #endif if (module.HasAssemblyReferences) { foreach (var ar in module.AssemblyReferences) { if (moduleref.Contains(ar.Name) == false) { moduleref.Add(ar.Name); } if (moduleref.Contains(ar.FullName) == false) { moduleref.Add(ar.FullName); } } } //mapModule[module.Name] = module; if (module.HasTypes) { foreach (var t in module.Types) { if (t.FullName.Contains(".My."))//vb 系统类不要 { continue; } mapType[t.FullName] = new ILType(this, t); if (t.HasNestedTypes) { foreach (var nt in t.NestedTypes) { mapType[nt.FullName] = new ILType(this, nt); } } } } }
static IUnresolvedAssembly LoadModule(Module module, string fileName) { var param = new Mono.Cecil.ReaderParameters { AssemblyResolver = new DummyAssemblyResolver() }; var cecilModule = Mono.Cecil.ModuleDefinition.ReadModule(fileName, param); var moduleMetadataInfo = new ModuleMetadataInfo(module, cecilModule); var loader = new CecilLoader(); loader.IncludeInternalMembers = true; loader.LazyLoad = true; loader.OnEntityLoaded = moduleMetadataInfo.AddMember; var asm = loader.LoadModule(cecilModule); weakTable.Add(asm, moduleMetadataInfo); return(asm); }
public override Mono.Cecil.AssemblyDefinition Resolve(Mono.Cecil.AssemblyNameReference name, Mono.Cecil.ReaderParameters parameters) { try { return(base.Resolve(name, parameters)); } catch { } return(null); }
public Mono.Cecil.AssemblyDefinition Resolve(string fullName, Mono.Cecil.ReaderParameters parameters) { return(null); }
public Mono.Cecil.AssemblyDefinition Resolve(Mono.Cecil.AssemblyNameReference name, Mono.Cecil.ReaderParameters parameters) { return(null); }
public Mono.Cecil.AssemblyDefinition Resolve(string assemblyName, Mono.Cecil.ReaderParameters parameters) { return(ResolveAssemblyByLocation(GetReferenceLocation(assemblyName), parameters)); }
static IUnresolvedAssembly LoadModule(Module module, string fileName) { var param = new Mono.Cecil.ReaderParameters { AssemblyResolver = new DummyAssemblyResolver() }; var cecilModule = Mono.Cecil.ModuleDefinition.ReadModule(fileName, param); var moduleMetadataInfo = new ModuleMetadataInfo(module, cecilModule); var loader = new CecilLoader(); loader.IncludeInternalMembers = true; loader.LazyLoad = true; loader.OnEntityLoaded = moduleMetadataInfo.AddMember; var asm = loader.LoadModule(cecilModule); weakTable.Add(asm, moduleMetadataInfo); return asm; }