示例#1
0
        /// <summary>
        /// </summary>
        /// <param name="assemblyMetadata">
        /// </param>
        /// <returns>
        /// </returns>
        private AssemblySymbol LoadAssemblySymbol(AssemblyMetadata assemblyMetadata, bool noCache = false)
        {
            AssemblySymbol symbol;

            if (!noCache && this.cache.TryGetValue(assemblyMetadata.GetAssembly().Identity, out symbol))
            {
                return(symbol);
            }

            var assemblySymbol = new PEAssemblySymbol(assemblyMetadata.GetAssembly(), DocumentationProvider.Default, isLinked: false, importOptions: MetadataImportOptions.All);

            this.cache[assemblyMetadata.GetAssembly().Identity] = assemblySymbol;
            this.unifiedAssemblies.Add(new UnifiedAssembly <AssemblySymbol>(assemblySymbol, assemblyMetadata.GetAssembly().Identity));

            var moduleReferences = this.LoadReferences(assemblyMetadata);

            foreach (var module in assemblySymbol.Modules)
            {
                module.SetReferences(moduleReferences);
            }

            this.SetCorLib(assemblySymbol);

            return(assemblySymbol);
        }
示例#2
0
        /// <summary>
        /// </summary>
        /// <param name="assemblyMetadata">
        /// </param>
        /// <returns>
        /// </returns>
        private ModuleReferences <AssemblySymbol> LoadReferences(AssemblyMetadata assemblyMetadata)
        {
            var peReferences = ImmutableArray.CreateRange(assemblyMetadata.GetAssembly().AssemblyReferences.Select(this.LoadAssemblySymbolOrMissingAssemblySymbol));

            var moduleReferences = new ModuleReferences <AssemblySymbol>(
                assemblyMetadata.GetAssembly().AssemblyReferences, peReferences, ImmutableArray.CreateRange(this.unifiedAssemblies));

            return(moduleReferences);
        }
示例#3
0
        public void ContainsNoPiaLocalTypes()
        {
            using (
                AssemblyMetadata piaMetadata = AssemblyMetadata.CreateFromImage(
                    TestResources.SymbolsTests.NoPia.Pia1
                    ),
                metadata1 = AssemblyMetadata.CreateFromImage(
                    TestResources.SymbolsTests.NoPia.LocalTypes1
                    ),
                metadata2 = AssemblyMetadata.CreateFromImage(
                    TestResources.SymbolsTests.NoPia.LocalTypes2
                    )
                )
            {
                var pia1        = piaMetadata.GetAssembly().Modules[0];
                var localTypes1 = metadata1.GetAssembly().Modules[0];
                var localTypes2 = metadata2.GetAssembly().Modules[0];

                Assert.False(pia1.ContainsNoPiaLocalTypes());
                Assert.False(pia1.ContainsNoPiaLocalTypes());

                Assert.True(localTypes1.ContainsNoPiaLocalTypes());
                Assert.True(localTypes1.ContainsNoPiaLocalTypes());

                Assert.True(localTypes2.ContainsNoPiaLocalTypes());
                Assert.True(localTypes2.ContainsNoPiaLocalTypes());
            }
        }
示例#4
0
        private void RemoveUnusedAssemblies(AssemblyMetadata assemblyMetadata)
        {
            var referencesInCompiledAssemblies = assemblyMetadata.GetAssembly().AssemblyReferences.Union(this.EnumerateAllReferencesInAssembly(assemblyMetadata.GetAssembly().AssemblyReferences));
            var usedAssemblies = this.Assemblies.Where(a => referencesInCompiledAssemblies.Contains(a)).ToArray();

            this.Assemblies = new HashSet <AssemblyIdentity>(usedAssemblies);
        }