private void Run(string[] args)
 {
     var commandLine = new CommandLine(args);
     var scanner = new VisualStudioAssemblyScanner(services);
     var assemblyNames =
         libraryManager.GetReferencingLibraries("machine.specifications").SelectMany(l => l.Assemblies);
     foreach (var assemblyName in assemblyNames)
     {
         var assembly = loadContext.Load(assemblyName);
         if (commandLine.DesignTime)
         {
             scanner.SendToVisualStudio(assembly);
             var listener = new AggregateRunListener(new ISpecificationRunListener[]
             {
                 new VisualStudioRunListener(services)
             });
             var runner = new DefaultRunner(listener, RunOptions.Default);
             if (commandLine.Tests.Any())
             {
                 var converter = new VisualStudioTestConverter();
                 var contexts = scanner.GetContexts(assembly);
                 foreach (var context in contexts)
                 {
                     foreach (var specification in context.Specifications)
                     {
                         var test = converter.GetVisualStudioTest(context, specification);
                         if (commandLine.Tests.Any(t => t == test.FullyQualifiedName))
                         {
                             runner.RunMember(assembly, specification.FieldInfo);
                         }
                     }
                 }
             }
             else
             {
                 runner.RunAssembly(assembly);
             }
         }
         else
         {
             var listener = new AggregateRunListener(new ISpecificationRunListener[]
             {
                 new OutputRunListener(new ColorOutput(new VerboseOutput(new DefaultConsole()))),
             });
             var runner = new DefaultRunner(listener, RunOptions.Default);
             runner.RunAssembly(assembly);
         }
     }
 }
 public VisualStudioAssemblyScanner(IServiceProvider services)
 {
     provider = (ISourceInformationProvider) services.GetService(typeof (ISourceInformationProvider));
     sink = (ITestDiscoverySink) services.GetService(typeof (ITestDiscoverySink));
     converter = new VisualStudioTestConverter();
 }
 public VisualStudioRunListener(IServiceProvider services)
 {
     sink = (ITestExecutionSink)services.GetService(typeof(ITestExecutionSink));
     converter = new VisualStudioTestConverter();
 }