public async Task RunAsync(CancellationToken token)
        {
            if (_writerProvider.TryGetWriter(_analysisOptions.Value.Format, out var writer))
            {
                const string resultDefName           = "BinaryAnalysis";
                var          resultDefInformationUri = new Uri("https://docs.microsoft.com/en-us/dotnet/core/porting/upgrade-assistant-overview");
                var          version = GetExtensionVersion();

                var output = Path.Combine(Directory.GetCurrentDirectory(), $"AnalysisReport.{_analysisOptions.Value.Format}");

                _logger.LogInformation(LocalizedStrings.WritingOutputMessage, output);

                using var stream = File.Create(output);

                var allResults = new ConcurrentDictionary <string, ConcurrentBag <AnalyzeResult> >();

                await _apiChecker.RunAsync(result => Task.Run(() =>
                {
                    var bagToPopulate = allResults.GetOrAdd(result.FileLocation, new ConcurrentBag <AnalyzeResult>());
                    bagToPopulate.Add(result);
                }));

                await writer.WriteAsync(allResults
                                        .Select(g => new AnalyzeResultDefinition
                {
                    AnalysisResults = g.Value.ToAsyncEnumerable(),
                    Name = $"{resultDefName} | {g.Key}",
                    Version = version,
                    InformationUri = resultDefInformationUri,
                }).ToAsyncEnumerable(), stream, token);

                _logger.LogInformation(LocalizedStrings.AnalysisCompleteMessage, output);
            }
            else
            {
                _logger.LogError(LocalizedStrings.RequestedFormatUnavailableMessage, _analysisOptions.Value.Format);
            }
        }
示例#2
0
        public async Task RunAsync(CancellationToken token)
        {
            using var context = await _contextFactory.CreateContext(token);

            await _stateManager.LoadStateAsync(context, token);

            var analzyerContext  = new AnalyzeContext(context);
            var analyzeResultMap = new List <AnalyzeResultDefinition>();

            await foreach (var provider in _providers.ToAsyncEnumerable().WhereAwait(async i => await i.IsApplicableAsync(analzyerContext, token)))
            {
                analyzeResultMap.Add(new()
                {
                    Version         = GetProviderVersion(provider),
                    Name            = provider.Name,
                    InformationUri  = provider.InformationUri,
                    AnalysisResults = provider.AnalyzeAsync(analzyerContext, token),
                });
            }

            if (_writerProvider.TryGetWriter(_options.Value.Format, out var writer))
            {
                var output = Path.Combine(Directory.GetCurrentDirectory(), $"AnalysisReport.{_options.Value.Format}");

                _logger.LogInformation(LocalizedStrings.WritingOutputMessage, output);

                using var stream = File.Create(output);
                await writer.WriteAsync(analyzeResultMap.ToAsyncEnumerable(), stream, token).ConfigureAwait(false);

                _logger.LogInformation(LocalizedStrings.AnalysisCompleteMessage, output);
            }
            else
            {
                _logger.LogError(LocalizedStrings.RequestedFormatUnavailableMessage, _options.Value.Format);
            }
        }