Exemplo n.º 1
0
 public static AssemblyLoaderImpl Create(InteractiveAssemblyLoader loader)
 {
     if (CoreClrShim.AssemblyLoadContext.Type != null)
     {
         return CreateCoreImpl(loader);
     }
     else
     {
         return new DesktopAssemblyLoaderImpl(loader);
     }
 }
            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);
            }
Exemplo n.º 3
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); 
            }
 internal CoreAssemblyLoaderImpl(InteractiveAssemblyLoader loader)
     : base(loader)
 {
     _inMemoryAssemblyContext = new LoadContext(Loader, null);
 }
Exemplo n.º 5
0
 public DesktopAssemblyLoaderImpl(InteractiveAssemblyLoader loader)
     : base(loader)
 {
     _assemblyResolveHandlerOpt = loader.ResolveAssembly;
     CorLightup.Desktop.AddAssemblyResolveHandler(_assemblyResolveHandlerOpt);
 }
Exemplo n.º 6
0
        public async Task MissingRefrencesAutoResolution()  
        {
            var portableLib = CSharpCompilation.Create(
                "PortableLib",                                                
                new[] { SyntaxFactory.ParseSyntaxTree("public class C {}") }, 
                new[] { SystemRuntimePP7Ref },
                new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));

            var portableLibRef = portableLib.ToMetadataReference();

            var loader = new InteractiveAssemblyLoader();
            loader.RegisterDependency(Assembly.Load(portableLib.EmitToArray().ToArray()));

            var s0 = await CSharpScript.Create("new C()", options: ScriptOptions.Default.AddReferences(portableLibRef), assemblyLoader: loader).RunAsync();
            var c0 = s0.Script.GetCompilation();

            // includes corlib, host type assembly by default:
            AssertEx.Equal(new[]
            {
                typeof(object).GetTypeInfo().Assembly.Location,
                "PortableLib"
            }, c0.ExternalReferences.SelectAsArray(m => m.Display));

            // System.Runtime, 4.0.0.0 depends on all the assemblies below:
            AssertEx.Equal(new[]
            {
                "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
                "PortableLib, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
                "System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
                "System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
                "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
                "System.ComponentModel.Composition, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
                "System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
                "System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
                "System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
                "System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
                "System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
            }, c0.GetBoundReferenceManager().GetReferencedAssemblies().Select(a => a.Value.Identity.GetDisplayName()));
        }
Exemplo n.º 7
0
 public DesktopAssemblyLoaderImpl(InteractiveAssemblyLoader loader) : base(loader)
 {
     _assemblyResolveHandlerOpt = loader.ResolveAssembly;
     CoreLightup.Desktop.AddAssemblyResolveHandler(_assemblyResolveHandlerOpt);
 }
Exemplo n.º 8
0
 private static AssemblyLoaderImpl CreateCoreImpl(InteractiveAssemblyLoader loader)
 {
     return new CoreAssemblyLoaderImpl(loader);
 }
Exemplo n.º 9
0
 protected AssemblyLoaderImpl(InteractiveAssemblyLoader loader)
 {
     Loader = loader;
 }
Exemplo n.º 10
0
 internal CoreAssemblyLoaderImpl(InteractiveAssemblyLoader loader)
     : base(loader)
 {
     _inMemoryAssemblyContext = new LoadContext(Loader, null);
 }
Exemplo n.º 11
0
 public abstract Script <T> CreateScript <T>(
     string code,
     ScriptOptions options,
     Type globalsTypeOpt,
     InteractiveAssemblyLoader assemblyLoader
     );
 private static AssemblyLoaderImpl CreateCoreImpl(InteractiveAssemblyLoader loader)
 {
     return(new CoreAssemblyLoaderImpl(loader));
 }
 protected AssemblyLoaderImpl(InteractiveAssemblyLoader loader)
 {
     Loader = loader;
 }