Exemple #1
0
        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);
 }
Exemple #3
0
 /// <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);
 }
Exemple #9
0
 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;
		}