public override bool Execute() { WaitForDebuggerIfEnabled(); IServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddTransient <IProcessExitHandler, ProcessExitHandler>(); serviceCollection.AddTransient <IFileSystem, FileSystem>(); serviceCollection.AddTransient <IConsole, SystemConsole>(); serviceCollection.AddTransient <ILogger, MSBuildLogger>(_ => _logger); serviceCollection.AddTransient <IRetryHelper, RetryHelper>(); // We cache resolutions serviceCollection.AddSingleton <ISourceRootTranslator, SourceRootTranslator>(serviceProvider => new SourceRootTranslator(Path, serviceProvider.GetRequiredService <ILogger>(), serviceProvider.GetRequiredService <IFileSystem>())); // We need to keep singleton/static semantics serviceCollection.AddSingleton <IInstrumentationHelper, InstrumentationHelper>(); serviceCollection.AddSingleton <ICecilSymbolHelper, CecilSymbolHelper>(); ServiceProvider = serviceCollection.BuildServiceProvider(); try { var fileSystem = ServiceProvider.GetService <IFileSystem>(); CoverageParameters parameters = new CoverageParameters { IncludeFilters = Include?.Split(','), IncludeDirectories = IncludeDirectory?.Split(','), ExcludeFilters = Exclude?.Split(','), ExcludedSourceFiles = ExcludeByFile?.Split(','), ExcludeAttributes = ExcludeByAttribute?.Split(','), IncludeTestAssembly = IncludeTestAssembly, SingleHit = SingleHit, MergeWith = MergeWith, UseSourceLink = UseSourceLink, SkipAutoProps = SkipAutoProps, DoesNotReturnAttributes = DoesNotReturnAttribute?.Split(',') }; Coverage coverage = new Coverage(Path, parameters, _logger, ServiceProvider.GetService <IInstrumentationHelper>(), ServiceProvider.GetService <IFileSystem>(), ServiceProvider.GetService <ISourceRootTranslator>(), ServiceProvider.GetService <ICecilSymbolHelper>()); CoveragePrepareResult prepareResult = coverage.PrepareModules(); InstrumenterState = new TaskItem(System.IO.Path.GetTempFileName()); using (var instrumentedStateFile = fileSystem.NewFileStream(InstrumenterState.ItemSpec, FileMode.Open, FileAccess.Write)) { using (Stream serializedState = CoveragePrepareResult.Serialize(prepareResult)) { serializedState.CopyTo(instrumentedStateFile); } } } catch (Exception ex) { _logger.LogError(ex); return(false); } return(true); }
/// <summary> /// Adds a attribute to the list of attribute to exclude /// </summary> /// <param name="attribute">The attribute to exclude</param> /// <returns></returns> public CoverletSettings WithAttributeExclusion(string attribute) { ExcludeByAttribute.Add(attribute); return(this); }