Ejemplo n.º 1
0
            internal LoadContext(InteractiveAssemblyLoader loader, string loadDirectoryOpt)
            {
                Debug.Assert(loader != null);

                _loader           = loader;
                _loadDirectoryOpt = loadDirectoryOpt;

                // CoreCLR resolves assemblies in steps:
                //
                //   1) Call AssemblyLoadContext.Load -- our context returns null
                //   2) TPA list
                //   3) Default.Resolving event
                //   4) AssemblyLoadContext.Resolving event -- hooked below
                //
                // What we want is to let the default context load assemblies it knows about (this includes already loaded assemblies,
                // assemblies in AppPath, platform assemblies, assemblies explciitly resolved by the App by hooking Default.Resolving, etc.).
                // Only if the assembly can't be resolved that way, the interactive resolver steps in.
                //
                // This order is necessary to avoid loading assemblies twice (by the host App and by interactive loader).

                Resolving += (_, assemblyName) =>
                             _loader.ResolveAssembly(
                    AssemblyIdentity.FromAssemblyReference(assemblyName),
                    _loadDirectoryOpt
                    );
            }
 protected override Assembly Load(AssemblyName assemblyName)
 {
     return(_loader.Loader.ResolveAssembly(AssemblyIdentity.FromAssemblyReference(assemblyName), _loadDirectoryOpt) ??
            Default.LoadFromAssemblyName(assemblyName));
 }