public Report Analyse()
        {
            var report = new Report();

            var dotnetProjects = DotnetProject.FindProjects(_folder);

            foreach (var dotnetProject in dotnetProjects)
            {
                report.AddProject(dotnetProject);
                var dependencies = dotnetProject.Dependencies;

                foreach (var dependency in dependencies)
                {
                    var queryedDependency = _dependencyChecker.VerifyLastestVersion(dependency);

                    if (queryedDependency.HasValue == false)
                    {
                        throw new Exception("TODO");
                    }
                    // TODO: what we should do if the call fails?

                    report.AddDependencyToProject(
                        dependency,
                        queryedDependency.Value.Version,
                        dotnetProject);
                }
            }

            return(report);
        }
        internal void AddProject(
            DotnetProject project)
        {
            if (_projectsDependencies.Any(x => x.Project == project))
            {
                throw new Exception("TODO");
            }

            _projectsDependencies.Add(
                new ProjectDependencies(
                    project));
        }
        internal void AddDependencyToProject(
            Dependency dependency,
            SemVersion version,
            DotnetProject project)
        {
            var projectDependencies = _projectsDependencies.SingleOrDefault(
                x => x.Project == project);

            if (projectDependencies == null)
            {
                throw new Exception("TODO");
            }

            projectDependencies.AddDependency(
                dependency,
                version
                );
        }
 internal ProjectDependencies(
     DotnetProject project)
 {
     Project       = project;
     _dependencies = new List <DependencyReport>();
 }