Пример #1
0
        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;
        }
Пример #2
0
        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);
        }