/// <summary> /// Builds this instance, loads all modules, etc. /// </summary> /// <returns>This</returns> public IBootstrapper Build() { BeforeBuild(); Register <IEnumerable <Assembly> >(Assemblies); RegisterAll <IModule>(); BeforeModuleResolve(); foreach (var ResolvedModule in ResolveAll <IModule>().OrderBy(x => x.Order)) { ResolvedModule.Load(this); } AfterBuild(); Builder.Bootstrapper = this; return(this); }
/// <inheritdoc/> public bool TryUpdateExternalModuleReference(ISourceFile sourceFile, ModuleDefinition externalModuleReference, out Failure failure) { Contract.Requires(sourceFile != null); Contract.Requires(externalModuleReference != null); failure = null; if (sourceFile.ResolvedModules.ContainsKey(externalModuleReference.Descriptor.Name)) { return(true); } // We only update the resolved modules of the file if the external module is one with explicit references. This is because, in that // case, the file actually represents the module exports. Otherwise, the resolved modules field is not used by the checker for resolution // and the export symbol is computed as an aggregation of all the files in the module if (externalModuleReference.ResolutionSemantics == NameResolutionSemantics.ExplicitProjectReferences) { var resolvedModule = new ResolvedModule(externalModuleReference.MainFile.ToString(m_pathTable), isExternaLibraryImport: true); sourceFile.ResolvedModules[externalModuleReference.Descriptor.Name] = resolvedModule; } return(true); }