コード例 #1
0
        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
        }
コード例 #2
0
ファイル: DomPersistence.cs プロジェクト: VE-2016/VE-2016
            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);
                }
            }
コード例 #3
0
        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));
        }
コード例 #4
0
        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"));
            }
        }
コード例 #5
0
 public ReflectionProjectContent(string assemblyFullName, string assemblyLocation, AssemblyName[] referencedAssemblies, ProjectContentRegistry registry)
     : this(assemblyFullName, assemblyLocation, DomAssemblyName.Convert(referencedAssemblies), registry)
 {
 }
コード例 #6
0
 public ReflectionProjectContent(Assembly assembly, ProjectContentRegistry registry)
     : this(assembly, assembly.Location, registry)
 {
 }
コード例 #7
0
ファイル: ReflectionLoader.cs プロジェクト: VE-2016/VE-2016
        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;
            }
        }