예제 #1
0
        public static TestManager Start(Project project, IDotNetCliService dotNetCli, IEventEmitter eventEmitter, ILoggerFactory loggerFactory)
        {
            var manager = Create(project, dotNetCli, eventEmitter, loggerFactory);

            manager.Connect();
            return(manager);
        }
        public TestServiceProvider(
            IOmniSharpEnvironment environment,
            ILoggerFactory loggerFactory,
            ISharedTextWriter sharedTextWriter,
            IConfiguration configuration,
            IEventEmitter eventEmitter,
            IDotNetCliService dotNetCliService = null)
        {
            _logger = loggerFactory.CreateLogger <TestServiceProvider>();

            _services[typeof(IOptionsMonitor <OmniSharpOptions>)] = new OptionsMonitor <OmniSharpOptions>(
                new IConfigureOptions <OmniSharpOptions>[] {
                new ConfigureOptions <OmniSharpOptions>(c => ConfigurationBinder.Bind(configuration, c))
            },
                Enumerable.Empty <IOptionsChangeTokenSource <OmniSharpOptions> >()
                );

            var assemblyLoader = new AssemblyLoader(loggerFactory);
            var msbuildLocator = MSBuildLocator.CreateStandAlone(loggerFactory, assemblyLoader, allowMonoPaths: false);
            var memoryCache    = new MemoryCache(new MemoryCacheOptions());

            dotNetCliService = dotNetCliService ?? new DotNetCliService(loggerFactory, eventEmitter);

            _services[typeof(ILoggerFactory)]        = loggerFactory;
            _services[typeof(IOmniSharpEnvironment)] = environment;
            _services[typeof(IAssemblyLoader)]       = assemblyLoader;
            _services[typeof(IMemoryCache)]          = memoryCache;
            _services[typeof(ISharedTextWriter)]     = sharedTextWriter;
            _services[typeof(IMSBuildLocator)]       = msbuildLocator;
            _services[typeof(IEventEmitter)]         = eventEmitter;
            _services[typeof(IDotNetCliService)]     = dotNetCliService;
        }
예제 #3
0
        public ProjectSystem(
            IOmniSharpEnvironment environment,
            OmniSharpWorkspace workspace,
            IMSBuildLocator msbuildLocator,
            IDotNetCliService dotNetCliService,
            SdksPathResolver sdksPathResolver,
            MetadataFileReferenceCache metadataFileReferenceCache,
            IEventEmitter eventEmitter,
            IFileSystemWatcher fileSystemWatcher,
            FileSystemHelper fileSystemHelper,
            ILoggerFactory loggerFactory)
        {
            _environment                = environment;
            _workspace                  = workspace;
            _propertyOverrides          = msbuildLocator.RegisteredInstance.PropertyOverrides;
            _dotNetCli                  = dotNetCliService;
            _sdksPathResolver           = sdksPathResolver;
            _metadataFileReferenceCache = metadataFileReferenceCache;
            _eventEmitter               = eventEmitter;
            _fileSystemWatcher          = fileSystemWatcher;
            _fileSystemHelper           = fileSystemHelper;
            _loggerFactory              = loggerFactory;

            _projectsToProcess = new Queue <ProjectFileInfo>();
            _logger            = loggerFactory.CreateLogger <ProjectSystem>();
        }
 public PackageDependencyChecker(ILoggerFactory loggerFactory, IEventEmitter eventEmitter, IDotNetCliService dotNetCli, MSBuildOptions options)
 {
     _logger       = loggerFactory.CreateLogger <PackageDependencyChecker>();
     _eventEmitter = eventEmitter;
     _dotNetCli    = dotNetCli;
     _options      = options;
 }
예제 #5
0
        private static IConfigurationRoot CreateConfiguration(IConfiguration configurationData,
                                                              IDotNetCliService dotNetCliService)
        {
            var info            = dotNetCliService.GetInfo();
            var msbuildSdksPath = Path.Combine(info.BasePath, "Sdks");

            var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder();

            if (configurationData != null)
            {
                builder.AddConfiguration(configurationData);
            }

            // We need to set the "UseLegacySdkResolver" for tests because
            // MSBuild's SDK resolver will not be able to locate the .NET Core SDKs
            // that we install locally in the ".dotnet" directory.
            // This property will cause the MSBuild project loader to set the
            // MSBuildSDKsPath environment variable to the correct path "Sdks" folder
            // within the appropriate .NET Core SDK.
            var msbuildProperties = new Dictionary <string, string>()
            {
                [$"MSBuild:{nameof(MSBuildOptions.UseLegacySdkResolver)}"] = "true",
                [$"MSBuild:{nameof(MSBuildOptions.MSBuildSDKsPath)}"]      = msbuildSdksPath
            };

            builder.AddInMemoryCollection(msbuildProperties);

            return(builder.Build());
        }
예제 #6
0
 protected BaseTestService(OmniSharpWorkspace workspace, IDotNetCliService dotNetCli, IEventEmitter eventEmitter, ILoggerFactory loggerFactory)
 {
     Workspace     = workspace;
     DotNetCli     = dotNetCli;
     EventEmitter  = eventEmitter;
     LoggerFactory = loggerFactory;
 }
예제 #7
0
        public ProjectSystem(
            IOmniSharpEnvironment environment,
            OmniSharpWorkspace workspace,
            IMSBuildLocator msbuildLocator,
            IDotNetCliService dotNetCliService,
            SdksPathResolver sdksPathResolver,
            MetadataFileReferenceCache metadataFileReferenceCache,
            IEventEmitter eventEmitter,
            IFileSystemWatcher fileSystemWatcher,
            FileSystemHelper fileSystemHelper,
            ILoggerFactory loggerFactory,
            CachingCodeFixProviderForProjects codeFixesForProjects,
            RulesetsForProjects rulesetsForProjects,
            IAnalyzerAssemblyLoader assemblyLoader,
            [ImportMany] IEnumerable <IMSBuildEventSink> eventSinks)
        {
            _environment                = environment;
            _workspace                  = workspace;
            _propertyOverrides          = msbuildLocator.RegisteredInstance.PropertyOverrides;
            _dotNetCli                  = dotNetCliService;
            _sdksPathResolver           = sdksPathResolver;
            _metadataFileReferenceCache = metadataFileReferenceCache;
            _eventEmitter               = eventEmitter;
            _fileSystemWatcher          = fileSystemWatcher;
            _fileSystemHelper           = fileSystemHelper;
            _loggerFactory              = loggerFactory;
            _rulesetsForProjects        = rulesetsForProjects;
            _eventSinks                 = eventSinks.ToImmutableArray();

            _projectsToProcess = new Queue <ProjectFileInfo>();
            _logger            = loggerFactory.CreateLogger <ProjectSystem>();
            _assemblyLoader    = assemblyLoader;
        }
        private TestServiceProvider(
            IOmniSharpEnvironment environment,
            ILoggerFactory loggerFactory,
            IAssemblyLoader assemblyLoader,
            IAnalyzerAssemblyLoader analyzerAssemblyLoader,
            IMemoryCache memoryCache,
            ISharedTextWriter sharedTextWriter,
            IMSBuildLocator msbuildLocator,
            IEventEmitter eventEmitter,
            IDotNetCliService dotNetCliService,
            IConfigurationRoot configuration,
            IOptionsMonitor <OmniSharpOptions> optionsMonitor)
        {
            _logger = loggerFactory.CreateLogger <TestServiceProvider>();

            AddService(environment);
            AddService(loggerFactory);
            AddService(assemblyLoader);
            AddService(memoryCache);
            AddService(sharedTextWriter);
            AddService(msbuildLocator);
            AddService(eventEmitter);
            AddService(dotNetCliService);
            AddService(configuration);
            AddService(optionsMonitor);
            AddService(analyzerAssemblyLoader);
        }
예제 #9
0
 protected TestManager(Project project, string workingDirectory, IDotNetCliService dotNetCli, SemanticVersion dotNetCliVersion, IEventEmitter eventEmitter, ILogger logger)
 {
     Project          = project ?? throw new ArgumentNullException(nameof(project));
     WorkingDirectory = workingDirectory ?? throw new ArgumentNullException(nameof(workingDirectory));
     DotNetCli        = dotNetCli ?? throw new ArgumentNullException(nameof(dotNetCli));
     DotNetCliVersion = dotNetCliVersion ?? throw new ArgumentNullException(nameof(dotNetCliVersion));
     EventEmitter     = eventEmitter ?? throw new ArgumentNullException(nameof(eventEmitter));
     Logger           = logger ?? throw new ArgumentNullException(nameof(logger));
 }
예제 #10
0
        public static TestManager Create(Project project, IDotNetCliService dotNetCli, IEventEmitter eventEmitter, ILoggerFactory loggerFactory)
        {
            var workingDirectory = Path.GetDirectoryName(project.FilePath);

            var version = dotNetCli.GetVersion(workingDirectory);

            return(dotNetCli.IsLegacy(version)
                ? new LegacyTestManager(project, workingDirectory, dotNetCli, version, eventEmitter, loggerFactory)
                : (TestManager) new VSTestManager(project, workingDirectory, dotNetCli, version, eventEmitter, loggerFactory));
        }
예제 #11
0
        public static TestManager Create(Project project, IDotNetCliService dotNetCli, IEventEmitter eventEmitter, ILoggerFactory loggerFactory)
        {
            var workingDirectory = Path.GetDirectoryName(project.FilePath);

            var version = dotNetCli.GetVersion(workingDirectory);

            if (dotNetCli.IsLegacy(version))
            {
                throw new NotSupportedException("Legacy .NET SDK is not supported");
            }

            return((TestManager) new VSTestManager(project, workingDirectory, dotNetCli, version, eventEmitter, loggerFactory));
        }
        public DotNetProjectSystem(
            IOmniSharpEnvironment environment,
            OmniSharpWorkspace workspace,
            IDotNetCliService dotNetCliService,
            MetadataFileReferenceCache metadataFileReferenceCache,
            IEventEmitter eventEmitter,
            IFileSystemWatcher fileSystemWatcher,
            ILoggerFactory loggerFactory)
        {
            _environment                = environment;
            _workspace                  = workspace;
            _dotNetCliService           = dotNetCliService;
            _metadataFileReferenceCache = metadataFileReferenceCache;
            _eventEmitter               = eventEmitter;
            _fileSystemWatcher          = fileSystemWatcher;
            _logger = loggerFactory.CreateLogger <DotNetProjectSystem>();

            _projectStates = new ProjectStatesCache(loggerFactory, _eventEmitter);
        }
예제 #13
0
        private TestServiceProvider(
            IOmniSharpEnvironment environment,
            ILoggerFactory loggerFactory,
            IAssemblyLoader assemblyLoader,
            IAnalyzerAssemblyLoader analyzerAssemblyLoader,
            ISharedTextWriter sharedTextWriter,
            IMSBuildLocator msbuildLocator,
            IEventEmitter eventEmitter,
            IDotNetCliService dotNetCliService,
            IConfigurationRoot configuration)
        {
            _logger = loggerFactory.CreateLogger <TestServiceProvider>();
            var services = _services = new ServiceCollection();

            services
            .AddLogging()
            .AddOptions()
            .AddMemoryCache();

            services
            .AddSingleton(environment)
            .AddSingleton(loggerFactory)
            .AddSingleton(assemblyLoader)
            .AddSingleton(sharedTextWriter)
            .AddSingleton(msbuildLocator)
            .AddSingleton(eventEmitter)
            .AddSingleton(dotNetCliService)
            .AddSingleton(configuration)
            .AddSingleton(configuration as IConfiguration)
            .Configure <OmniSharpOptions>(configuration)
            .PostConfigure <OmniSharpOptions>(OmniSharpOptions.PostConfigure)
            .AddSingleton(analyzerAssemblyLoader);

            services.TryAddSingleton(_ => new ManualFileSystemWatcher());
            services.TryAddSingleton <IFileSystemNotifier>(_ => _.GetRequiredService <ManualFileSystemWatcher>());
            services.TryAddSingleton <IFileSystemWatcher>(_ => _.GetRequiredService <ManualFileSystemWatcher>());

            _serviceProvider = services.BuildServiceProvider();
        }
예제 #14
0
        public ProjectManager(
            ILoggerFactory loggerFactory,
            MSBuildOptions options,
            IEventEmitter eventEmitter,
            IFileSystemWatcher fileSystemWatcher,
            MetadataFileReferenceCache metadataFileReferenceCache,
            PackageDependencyChecker packageDependencyChecker,
            ProjectLoader projectLoader,
            OmniSharpWorkspace workspace,
            IAnalyzerAssemblyLoader analyzerAssemblyLoader,
            ImmutableArray <IMSBuildEventSink> eventSinks,
            IDotNetCliService dotNetCliService)
        {
            _logger                     = loggerFactory.CreateLogger <ProjectManager>();
            _options                    = options ?? new MSBuildOptions();
            _eventEmitter               = eventEmitter;
            _fileSystemWatcher          = fileSystemWatcher;
            _metadataFileReferenceCache = metadataFileReferenceCache;
            _packageDependencyChecker   = packageDependencyChecker;
            _projectFiles               = new ProjectFileInfoCollection();
            _failedToLoadProjectFiles   = new HashSet <string>(StringComparer.OrdinalIgnoreCase);
            _projectsRequestedOnDemand  = new ConcurrentDictionary <string, int>(StringComparer.OrdinalIgnoreCase);
            _projectLoader              = projectLoader;
            _workspace                  = workspace;
            _eventSinks                 = eventSinks;
            _dotNetCli                  = dotNetCliService;
            _queue = new BufferBlock <ProjectToUpdate>();
            _processLoopCancellation = new CancellationTokenSource();
            _processLoopTask         = Task.Run(() => ProcessLoopAsync(_processLoopCancellation.Token));
            _analyzerAssemblyLoader  = analyzerAssemblyLoader;
            _onDirectoryFileChanged  = OnDirectoryFileChanged;

            if (_options.LoadProjectsOnDemand)
            {
                _workspace.AddWaitForProjectModelReadyHandler(WaitForProjectModelReadyAsync);
            }
        }
예제 #15
0
 public SdksPathResolver(IDotNetCliService dotNetCli, ILoggerFactory loggerFactory)
 {
     _dotNetCli = dotNetCli;
     _logger    = loggerFactory.CreateLogger <SdksPathResolver>();
 }
예제 #16
0
 protected BaseTestService(OmniSharpWorkspace workspace, IDotNetCliService dotNetCli, IEventEmitter eventEmitter, ILoggerFactory loggerFactory)
     : base(workspace, dotNetCli, eventEmitter, loggerFactory)
 {
 }
예제 #17
0
 public RunTestsInContextService(OmniSharpWorkspace workspace, IDotNetCliService dotNetCli, IEventEmitter eventEmitter, ILoggerFactory loggerFactory)
     : base(workspace, dotNetCli, eventEmitter, loggerFactory)
 {
 }
예제 #18
0
 public VSTestManager(Project project, string workingDirectory, IDotNetCliService dotNetCli, SemanticVersion dotNetCliVersion, IEventEmitter eventEmitter, ILoggerFactory loggerFactory)
     : base(project, workingDirectory, dotNetCli, dotNetCliVersion, eventEmitter, loggerFactory.CreateLogger <VSTestManager>())
 {
 }
예제 #19
0
 public GetTestStartInfoService(OmniSharpWorkspace workspace, IDotNetCliService dotNetCli, IEventEmitter eventEmitter, ILoggerFactory loggerFactory)
     : base(workspace, dotNetCli, eventEmitter, loggerFactory)
 {
 }
 public DiscoverTestsService(OmniSharpWorkspace workspace, IDotNetCliService dotNetCli, IEventEmitter eventEmitter, ILoggerFactory loggerFactory)
     : base(workspace, dotNetCli, eventEmitter, loggerFactory)
 {
 }
예제 #21
0
 public DebugTestService(DebugSessionManager debugSessionManager, OmniSharpWorkspace workspace, IDotNetCliService dotNetCli, IEventEmitter eventEmitter, ILoggerFactory loggerFactory)
     : base(workspace, dotNetCli, eventEmitter, loggerFactory)
 {
     _debugSessionManager = debugSessionManager;
 }