示例#1
0
        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);
 }