protected void LoadReferencesCore(ModuleContainer module, out T corlib_assembly, out List <Tuple <RootNamespace, T> > loaded) { compiler.TimeReporter.Start(TimeReporter.TimerType.ReferencesLoading); loaded = new List <Tuple <RootNamespace, T> > (); // // Load mscorlib.dll as the first // if (module.Compiler.Settings.StdLib) { corlib_assembly = LoadAssemblyFile("mscorlib.dll", true); } else { corlib_assembly = default(T); } T a; foreach (string r in module.Compiler.Settings.AssemblyReferences) { a = LoadAssemblyFile(r, false); if (a == null || EqualityComparer <T> .Default.Equals(a, corlib_assembly)) { continue; } var key = Tuple.Create(module.GlobalRootNamespace, a); if (loaded.Contains(key)) { continue; } // A corlib assembly is the first assembly which contains System.Object if (corlib_assembly == null && HasObjectType(a)) { corlib_assembly = a; continue; } loaded.Add(key); } foreach (var entry in module.Compiler.Settings.AssemblyReferencesAliases) { a = LoadAssemblyFile(entry.Item2, false); if (a == null) { continue; } var key = Tuple.Create(module.CreateRootNamespace(entry.Item1), a); if (loaded.Contains(key)) { continue; } loaded.Add(key); } if (compiler.Settings.LoadDefaultReferences) { foreach (string r in GetDefaultReferences()) { a = LoadAssemblyFile(r, true); if (a == null) { continue; } var key = Tuple.Create(module.GlobalRootNamespace, a); if (loaded.Contains(key)) { continue; } loaded.Add(key); } } compiler.TimeReporter.Stop(TimeReporter.TimerType.ReferencesLoading); }
/// <summary> /// Loads all assemblies referenced on the command line /// </summary> public void LoadReferences (ModuleContainer module) { Assembly a; var loaded = new List<Tuple<RootNamespace, Assembly>> (); // // Load Core Library for default compilation // if (RootContext.StdLib) { a = LoadAssemblyFile ("mscorlib", false); if (a != null) loaded.Add (Tuple.Create (module.GlobalRootNamespace, a)); } foreach (string r in default_references) { a = LoadAssemblyFile (r, true); if (a != null) loaded.Add (Tuple.Create (module.GlobalRootNamespace, a)); } foreach (string r in RootContext.AssemblyReferences) { a = LoadAssemblyFile (r, false); if (a == null) continue; var key = Tuple.Create (module.GlobalRootNamespace, a); if (loaded.Contains (key)) continue; loaded.Add (key); } foreach (var entry in RootContext.AssemblyReferencesAliases) { a = LoadAssemblyFile (entry.Item2, false); if (a == null) continue; var key = Tuple.Create (module.CreateRootNamespace (entry.Item1), a); if (loaded.Contains (key)) continue; loaded.Add (key); } foreach (var entry in loaded) { importer.ImportAssembly (entry.Item2, entry.Item1); } }
protected void LoadReferencesCore(ModuleContainer module, out T corlib_assembly, out List <Tuple <RootNamespace, T> > loaded) { compiler.TimeReporter.Start(TimeReporter.TimerType.ReferencesLoading); loaded = new List <Tuple <RootNamespace, T> > (); // // Load mscorlib.dll as the first // if (module.Compiler.Settings.StdLib) { corlib_assembly = LoadAssemblyFile("mscorlib.dll", true); } else { corlib_assembly = default(T); } T a; foreach (string r in module.Compiler.Settings.AssemblyReferences) { a = LoadAssemblyFile(r, false); if (a == null || EqualityComparer <T> .Default.Equals(a, corlib_assembly)) { continue; } var key = Tuple.Create(module.GlobalRootNamespace, a); if (loaded.Contains(key)) { continue; } loaded.Add(key); } if (corlib_assembly == null) { // // Requires second pass because HasObjectType can trigger assembly load event // for (int i = 0; i < loaded.Count; ++i) { var assembly = loaded [i]; // // corlib assembly is the first referenced assembly which contains System.Object // if (HasObjectType(assembly.Item2)) { corlib_assembly = assembly.Item2; loaded.RemoveAt(i); break; } } } foreach (var entry in module.Compiler.Settings.AssemblyReferencesAliases) { a = LoadAssemblyFile(entry.Item2, false); if (a == null) { continue; } var key = Tuple.Create(module.CreateRootNamespace(entry.Item1), a); if (loaded.Contains(key)) { continue; } loaded.Add(key); } if (compiler.Settings.LoadDefaultReferences) { foreach (string r in GetDefaultReferences()) { a = LoadAssemblyFile(r, true); if (a == null) { continue; } var key = Tuple.Create(module.GlobalRootNamespace, a); if (loaded.Contains(key)) { continue; } loaded.Add(key); } } compiler.TimeReporter.Stop(TimeReporter.TimerType.ReferencesLoading); }
protected void LoadReferencesCore(ModuleContainer module, out T corlib_assembly, out List <Tuple <RootNamespace, T> > loaded) { loaded = new List <Tuple <RootNamespace, T> > (); // // Load mscorlib.dll as the first // if (RootContext.StdLib) { corlib_assembly = LoadAssemblyDefault("mscorlib.dll"); } else { corlib_assembly = default(T); } T a; foreach (string r in default_references) { a = LoadAssemblyDefault(r); if (a != null) { loaded.Add(Tuple.Create(module.GlobalRootNamespace, a)); } } foreach (string r in RootContext.AssemblyReferences) { a = LoadAssemblyFile(r); if (a == null || EqualityComparer <T> .Default.Equals(a, corlib_assembly)) { continue; } var key = Tuple.Create(module.GlobalRootNamespace, a); if (loaded.Contains(key)) { continue; } // A corlib assembly is the first assembly which contains System.Object if (corlib_assembly == null && HasObjectType(a)) { corlib_assembly = a; continue; } loaded.Add(key); } foreach (var entry in RootContext.AssemblyReferencesAliases) { a = LoadAssemblyFile(entry.Item2); if (a == null) { continue; } var key = Tuple.Create(module.CreateRootNamespace(entry.Item1), a); if (loaded.Contains(key)) { continue; } loaded.Add(key); } }