internal AssemblyLoaderFromBasePath(CILReflectionContext ctx, String fwLibDirectory, Func <String, Stream> streamOpener, String corLibName) { ArgumentValidator.ValidateNotNull("Reflection context", ctx); ArgumentValidator.ValidateNotNull("Assembly directory", fwLibDirectory); ArgumentValidator.ValidateNotNull("Stream opener callback", streamOpener); if (corLibName == null) { corLibName = Consts.MSCORLIB_NAME; } this._ctx = ctx; this._loadedAssemblies = new ConcurrentDictionary <String, CILAssembly>(); this._portableLibDirectory = fwLibDirectory; // fwLibDirectory.EndsWith( "\\" ) ? fwLibDirectory : ( fwLibDirectory + "\\" ); this._streamOpener = streamOpener; this._loadArgs = EmittingArguments.CreateForLoadingModule(this.LoadFunction); this._loadArgs.CorLibName = corLibName; }
private CILModule LoadModuleAndArgs(String path, out EmittingArguments eArgs) { eArgs = EmittingArguments.CreateForLoadingModule(this.LoadLibAssembly); eArgs.LazyLoad = true; // Just to make sure - it is important to be set as true, otherwise we load things too soon. CILModule module; using (var fs = this._callbacks.OpenStream(path)) { module = this._ctx.LoadModule(fs, eArgs); } var fwInfo = this.GetMonikerInfoFor(path, eArgs); eArgs.CorLibName = fwInfo.MsCorLibAssembly; var corLibVersion = fwInfo.Assemblies[eArgs.CorLibName].Item1; eArgs.CorLibMajor = (UInt16)corLibVersion.Major; eArgs.CorLibMinor = (UInt16)corLibVersion.Minor; eArgs.CorLibBuild = (UInt16)corLibVersion.Build; eArgs.CorLibRevision = (UInt16)corLibVersion.Revision; return(module); }