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); }
/// <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)); }