Esempio n. 1
0
        private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            var assemblyName = new AssemblyName(args.Name);

            Logger.Debug("Resolving " + assemblyName);

            var packageLoader = _packageAssemblyLookup.GetLoaderForPackage(assemblyName.Name);

            if (packageLoader != null)
            {
                var lookup = packageLoader
                             .PackageAssemblyLookup
                             .Single(x => x.Key.Name == assemblyName.Name);

                var loader = new NuGetAssemblyLoader(
                    _assemblyLoadContextAccessor,
                    packageLoader);

                Logger.Debug("Resolved " + assemblyName);
                var assembly = loader.Load(lookup.Key);
                return(assembly);
            }

            Logger.Debug("Cannot resolve " + assemblyName);
            return(null);
        }
Esempio n. 2
0
        private int RunTests(TestOptions options)
        {
            if (options.Sink != null)
            {
                var parts              = options.Sink.Split('|');
                var packagesPath       = Path.GetFullPath(parts[0]);
                var dependencyResolver = new NuGetDependencyResolver(packagesPath);
                var lib = dependencyResolver.GetDescription(new LibraryRange
                {
                    Name = parts[1]
                }, _environment.RuntimeFramework);
                dependencyResolver.Initialize(new[] { lib }, _environment.RuntimeFramework);

                var dependencyLoader = new NuGetAssemblyLoader(_loadContextAccessor, dependencyResolver);
                var referenceLoader  = new ReferenceLoader(_frameworkReferenceResolver, _environment.RuntimeFramework);

                using (_container.AddLoader(dependencyLoader))
                    using (_container.AddLoader(referenceLoader))
                        using (var context = _loadContextFactory.Create())
                        {
                            var assembly = dependencyLoader.Load(parts[1], context);
                            var locator  = assembly.GetCustomAttributes()
                                           .OfType <ITestSinkFactory>()
                                           .FirstOrDefault();

                            if (locator == null)
                            {
                                throw new InvalidOperationException($"No assembly attribute found that implements the interface 'ITestSinkLocator' in the assembly ${assembly.GetName().Name}");
                            }

                            var testServices = new ServiceProvider(_services);
                            testServices.Add(typeof(ITestSinkFactory), locator);

                            return(RunTestAssembly(options, ".", _container, testServices) ? 0 : -1);
                        }
            }
            else
            {
                return(RunTestAssembly(options, ".", _container, _services) ? 0 : -1);
            }
        }