public static ReflectionProjectContent LoadProjectContent(Stream stream, ProjectContentRegistry registry) { ReflectionProjectContent pc; BinaryReader reader = new BinaryReader(stream); try { pc = new ReadWriteHelper(reader).ReadProjectContent(registry); if (pc != null) { pc.InitializeSpecialClasses(); } return(pc); } catch (EndOfStreamException) { LoggingService.Warn("Read dom: EndOfStreamException"); return(null); } // do not close the stream }
public ReflectionProjectContent ReadProjectContent(ProjectContentRegistry registry) { if (_reader.ReadInt64() != FileMagic) { LoggingService.Warn("Read dom: wrong magic"); return(null); } if (_reader.ReadInt16() != FileVersion) { LoggingService.Warn("Read dom: wrong version"); return(null); } string assemblyName = _reader.ReadString(); string assemblyLocation = _reader.ReadString(); long time = 0; try { time = File.GetLastWriteTimeUtc(assemblyLocation).ToFileTime(); } catch { } if (_reader.ReadInt64() != time) { LoggingService.Warn("Read dom: assembly changed since cache was created"); return(null); } DomAssemblyName[] referencedAssemblies = new DomAssemblyName[_reader.ReadInt32()]; for (int i = 0; i < referencedAssemblies.Length; i++) { referencedAssemblies[i] = new DomAssemblyName(_reader.ReadString()); } _pc = new ReflectionProjectContent(assemblyName, assemblyLocation, referencedAssemblies, registry); if (ReadClasses()) { return(_pc); } else { LoggingService.Warn("Read dom: error in file (invalid control mark)"); return(null); } }
public static ReflectionProjectContent LoadAssembly(string fileName, ProjectContentRegistry registry) { if (fileName == null) { throw new ArgumentNullException("fileName"); } if (registry == null) { throw new ArgumentNullException("registry"); } LoggingService.Info("Cecil: Load from " + fileName); AssemblyDefinition asm = AssemblyFactory.GetAssembly(fileName); List <DomAssemblyName> referencedAssemblies = new List <DomAssemblyName>(); foreach (ModuleDefinition module in asm.Modules) { foreach (AssemblyNameReference anr in module.AssemblyReferences) { referencedAssemblies.Add(new DomAssemblyName(anr.FullName)); } } return(new CecilProjectContent(asm.Name.FullName, fileName, referencedAssemblies.ToArray(), asm, registry)); }
public ReflectionProjectContent(string assemblyFullName, string assemblyLocation, DomAssemblyName[] referencedAssemblies, ProjectContentRegistry registry) { if (assemblyFullName == null) { throw new ArgumentNullException("assemblyFullName"); } if (assemblyLocation == null) { throw new ArgumentNullException("assemblyLocation"); } if (registry == null) { throw new ArgumentNullException("registry"); } this.registry = registry; this.assemblyFullName = assemblyFullName; this.referencedAssemblyNames = referencedAssemblies; this.assemblyLocation = assemblyLocation; this.assemblyCompilationUnit = new DefaultCompilationUnit(this); try { assemblyFileLastWriteTime = File.GetLastWriteTimeUtc(assemblyLocation); } catch (Exception ex) { LoggingService.Warn(ex); } string fileName = LookupLocalizedXmlDoc(assemblyLocation); if (fileName == null) { // Not found -> look in other directories: foreach (string testDirectory in XmlDoc.XmlDocLookupDirectories) { fileName = LookupLocalizedXmlDoc(Path.Combine(testDirectory, Path.GetFileName(assemblyLocation))); if (fileName != null) { break; } } } if (fileName != null && registry.persistence != null) { this.XmlDoc = XmlDoc.Load(fileName, Path.Combine(registry.persistence.CacheDirectory, "XmlDoc")); } }
public ReflectionProjectContent(string assemblyFullName, string assemblyLocation, AssemblyName[] referencedAssemblies, ProjectContentRegistry registry) : this(assemblyFullName, assemblyLocation, DomAssemblyName.Convert(referencedAssemblies), registry) { }
public ReflectionProjectContent(Assembly assembly, ProjectContentRegistry registry) : this(assembly, assembly.Location, registry) { }
private ReflectionProjectContent LoadProjectContent(string fileName, string include, ProjectContentRegistry registry) { fileName = Path.GetFullPath(fileName); LoggingService.Debug("Trying to load " + fileName); Assembly assembly; AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += AssemblyResolve; _lookupDirectory = Path.GetDirectoryName(fileName); try { if (File.Exists(fileName)) { assembly = Assembly.ReflectionOnlyLoadFrom(fileName); return(new ReflectionProjectContent(assembly, fileName, registry)); } assembly = ReflectionLoadGacAssembly(include, true); if (assembly != null) { return(new ReflectionProjectContent(assembly, registry)); } else { throw new FileLoadException("Assembly not found."); } } catch (BadImageFormatException ex) { LoggingService.Warn("BadImageFormat: " + include); throw new FileLoadException(ex.Message, ex); } finally { AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve -= AssemblyResolve; _lookupDirectory = null; } }