示例#1
0
        public void OneTimeSetUp()
        {
            _tmpTestProjectsExtractionPath = Path.GetFullPath(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()));
            Directory.CreateDirectory(_tmpTestProjectsExtractionPath);
            string testProjectsPath = Path.Combine(TestContext.CurrentContext.TestDirectory, "TestProjects", "NetFrameworkExample.zip");

            _vbTmpTestProjectsExtractionPath = Path.GetFullPath(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()));
            Directory.CreateDirectory(_vbTmpTestProjectsExtractionPath);
            string vbTestProjectsPath = Path.Combine(TestContext.CurrentContext.TestDirectory, "TestProjects", "VBWebApi.zip");

            var config            = new PortingAssistantConfiguration();
            var serviceCollection = new ServiceCollection();

            ConfigureServices(serviceCollection, config);

            var services = serviceCollection.BuildServiceProvider();

            portingAssistantClient = services.GetService <IPortingAssistantClient>();

            using (ZipArchive archive = ZipFile.Open(testProjectsPath, ZipArchiveMode.Read))
            {
                archive.ExtractToDirectory(_tmpTestProjectsExtractionPath);
            }

            using (ZipArchive archive = ZipFile.Open(vbTestProjectsPath, ZipArchiveMode.Read))
            {
                archive.ExtractToDirectory(_vbTmpTestProjectsExtractionPath);
            }

            var netFrameworkProjectPath = Path.Combine(_tmpTestProjectsExtractionPath, "NetFrameworkExample", "NetFrameworkExample.sln");

            solutionAnalysisResultTask = portingAssistantClient.AnalyzeSolutionAsync(netFrameworkProjectPath, new AnalyzerSettings()
            {
                TargetFramework = "netcoreapp3.1"
            });

            var vbNetFrameworkProjectPath = Path.Combine(_vbTmpTestProjectsExtractionPath, "VBWebApi", "VBWebApi.sln");

            vbSolutionAnalysisResultTask = portingAssistantClient.AnalyzeSolutionAsync(vbNetFrameworkProjectPath, new AnalyzerSettings()
            {
                TargetFramework = "netcoreapp3.1"
            });

            vbSolutionAnalysisResultIncTask = portingAssistantClient.AnalyzeSolutionAsync(vbNetFrameworkProjectPath, new AnalyzerSettings()
            {
                TargetFramework = "netcoreapp3.1", ContiniousEnabled = true
            });
        }
        public void OneTimeSetup()
        {
            _tmpTestProjectsExtractionPath = Path.GetFullPath(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()));
            Directory.CreateDirectory(_tmpTestProjectsExtractionPath);
            string testProjectsPath = Path.Combine(TestContext.CurrentContext.TestDirectory, "TestProjects", "NetFrameworkExample.zip");

            var config            = new PortingAssistantConfiguration();
            var serviceCollection = new ServiceCollection();

            ConfigureServices(serviceCollection, config);

            var services = serviceCollection.BuildServiceProvider();

            portingAssistantClient = services.GetService <IPortingAssistantClient>();

            using (ZipArchive archive = ZipFile.Open(testProjectsPath, ZipArchiveMode.Read))
            {
                archive.ExtractToDirectory(_tmpTestProjectsExtractionPath);
            }

            var netFrameworkProjectPath = Path.Combine(_tmpTestProjectsExtractionPath, "NetFrameworkExample", "NetFrameworkExample.sln");

            solutionAnalysisResultTask = portingAssistantClient.AnalyzeSolutionAsync(netFrameworkProjectPath, new AnalyzerSettings()
            {
                TargetFramework = "netcoreapp3.1", ContiniousEnabled = true
            });

            string solutionId;

            using (var sha = SHA256.Create())
            {
                byte[] textData = System.Text.Encoding.UTF8.GetBytes(netFrameworkProjectPath);
                byte[] hash     = sha.ComputeHash(textData);
                solutionId = BitConverter.ToString(hash);
            }
            _tmpSolutionDirectory = Path.Combine(Path.GetTempPath(), solutionId);
            _tmpSolutionDirectory = _tmpSolutionDirectory.Replace("-", "");
        }
        public void OneTimeSetup()
        {
            _tmpTestProjectsExtractionPath = Path.GetFullPath(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()));
            Directory.CreateDirectory(_tmpTestProjectsExtractionPath);
            string testProjectsPath = Path.Combine(TestContext.CurrentContext.TestDirectory, "TestProjects", "Miniblog.Core-master.zip");

            var config            = new PortingAssistantConfiguration();
            var serviceCollection = new ServiceCollection();

            ConfigureServices(serviceCollection, config);

            var services = serviceCollection.BuildServiceProvider();

            portingAssistantClient = services.GetService <IPortingAssistantClient>();

            using (ZipArchive archive = ZipFile.Open(testProjectsPath, ZipArchiveMode.Read))
            {
                archive.ExtractToDirectory(_tmpTestProjectsExtractionPath);
            }

            var netCoreProjectPath = Path.Combine(_tmpTestProjectsExtractionPath, "Miniblog.Core-master", "Miniblog.Core.sln");

            solutionAnalysisResultTask = portingAssistantClient.AnalyzeSolutionAsync(netCoreProjectPath, new AnalyzerSettings());
        }
        public Response <SolutionDetails, string> AnalyzeSolution(AnalyzeSolutionRequest request)
        {
            try
            {
                var solutionAnalysisResult = _client.AnalyzeSolutionAsync(request.solutionFilePath, request.settings);
                solutionAnalysisResult.Wait();

                if (solutionAnalysisResult.IsCompletedSuccessfully)
                {
                    solutionAnalysisResult.Result.ProjectAnalysisResults.ForEach(projectAnalysResult =>
                    {
                        if (projectAnalysResult == null)
                        {
                            return;
                        }

                        projectAnalysResult.PackageAnalysisResults.ToList()
                        .ForEach(p =>
                        {
                            p.Value.ContinueWith(result =>
                            {
                                if (result.IsCompletedSuccessfully)
                                {
                                    _nugetPackageListeners.ForEach(l => l.Invoke(new Response <PackageAnalysisResult, PackageVersionPair>
                                    {
                                        Value  = result.Result,
                                        Status = Response <PackageAnalysisResult, PackageVersionPair> .Success()
                                    }));
                                    return;
                                }

                                _nugetPackageListeners.ForEach(l => l.Invoke(new Response <PackageAnalysisResult, PackageVersionPair>
                                {
                                    ErrorValue = p.Key,
                                    Status     = Response <PackageAnalysisResult, PackageVersionPair> .Failed(result.Exception)
                                }));
                            });
                        });

                        if (projectAnalysResult.IsBuildFailed)
                        {
                            _apiAnalysisListeners.ForEach(listener =>
                                                          listener.Invoke(new Response <ProjectApiAnalysisResult, SolutionProject>
                            {
                                ErrorValue = new SolutionProject
                                {
                                    ProjectPath  = projectAnalysResult.ProjectFilePath,
                                    SolutionPath = request.solutionFilePath
                                },
                                Status = Response <ProjectApiAnalysisResult, SolutionProject>
                                         .Failed(new PortingAssistantClientException($"Errors during compilation in {projectAnalysResult.ProjectName}.", null))
                            }));

                            return;
                        }

                        _apiAnalysisListeners.ForEach(listener =>
                        {
                            listener.Invoke(new Response <ProjectApiAnalysisResult, SolutionProject>
                            {
                                Value = new ProjectApiAnalysisResult
                                {
                                    Errors       = projectAnalysResult.Errors,
                                    SolutionFile = request.solutionFilePath,
                                    ProjectFile  = projectAnalysResult.ProjectFilePath,
                                    ProjectGuid  = projectAnalysResult.ProjectGuid,
                                    SourceFileAnalysisResults = projectAnalysResult.SourceFileAnalysisResults
                                },
                                Status = Response <ProjectApiAnalysisResult, SolutionProject> .Success()
                            });
                        });

                        return;
                    });

                    solutionAnalysisResult.Result.FailedProjects.ForEach(projectFilePath =>
                    {
                        _apiAnalysisListeners.ForEach(listener =>
                                                      listener.Invoke(new Response <ProjectApiAnalysisResult, SolutionProject>
                        {
                            ErrorValue = new SolutionProject
                            {
                                ProjectPath  = projectFilePath,
                                SolutionPath = request.solutionFilePath
                            },
                            Status = Response <ProjectApiAnalysisResult, SolutionProject>
                                     .Failed(new PortingAssistantClientException($"Errors during compilation in {projectFilePath}.", null))
                        }));
                    });

                    return(new Response <SolutionDetails, string>
                    {
                        Value = solutionAnalysisResult.Result.SolutionDetails,
                        Status = Response <SolutionDetails, string> .Success()
                    });
                }
                else
                {
                    throw new PortingAssistantClientException($"anaylze solution {request.solutionFilePath} failed", solutionAnalysisResult.Exception);
                }
            }
            catch (Exception ex)
            {
                return(new Response <SolutionDetails, string>
                {
                    ErrorValue = request.solutionFilePath,
                    Status = Response <SolutionDetails, string> .Failed(ex)
                });
            }
        }