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); }
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); } }