コード例 #1
0
ファイル: MetadataContext.cs プロジェクト: exyi/coberec
        internal MetadataContext(HackedSimpleCompilation compilation, EmitSettings settings)
        {
            this.hackedCompilation = compilation;
            Settings          = settings ?? new EmitSettings();
            CSharpConversions = CSharpConversions.Get(compilation);
            moduleMap         = compilation.Modules.ToDictionary(m => new ModuleSignature(m.Name));
            Modules           = moduleMap.Keys.ToImmutableArray();
            MainModule        = Modules[0];
            mutableModule     = (VirtualModule)moduleMap[MainModule];

            Debug.Assert(MainModule.Name == this.Compilation.MainModule.Name);
        }
コード例 #2
0
ファイル: MetadataContext.cs プロジェクト: exyi/coberec
        /// <summary> Creates new empty context. </summary>
        /// <param name="references"> A list of assembly paths that will be included in the compilation. When null a default list is used (that contains some standard libraries) </param>
        public static MetadataContext Create(
            IEnumerable <string> references = null,
            EmitSettings settings           = null)
        {
            var modules           = new HashSet <string>();
            var referencedModules =
                references == null ? ReferencedModules.Value :
                references.Distinct().Select(r => new PEFile(r, PEStreamOptions.PrefetchMetadata)).Concat(ReferencedModules.Value)
                .Where(m => modules.Add(m.Name))
                .ToArray();
            // TODO   ^ add a way to override this implicit reference

            var compilation = new HackedSimpleCompilation(
                new VirtualModuleReference(true, "ExprCS.MainModule"),
                referencedModules
                );

            return(new MetadataContext(compilation, settings));
        }