Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }