Exemple #1
0
        /// <summary>
        /// Checks if package supports any of project's target frameworks
        /// </summary>
        public static bool SupportsProjectTargetFrameworks(IPackageIndexModelInfo typeInfo, IEnumerable <TargetFrameworkMetadata> projectTargetFrameworks)
        {
            // if we find at least any framework in package that current project supports,
            // we show this package to user.
            if (typeInfo.TargetFrameworks == null ||
                !typeInfo.TargetFrameworks.Any() ||
                typeInfo.TargetFrameworks.Any(x => x.Equals("Unsupported", StringComparison.OrdinalIgnoreCase)))
            {
                // In this case:
                //      if package did not specify any target frameworks
                //         or one of the frameworks is new and Nuget.Core can not recognize it - returning Unsupported
                //      we follow our default behavior and display as much as possible to the user, return true to show the package
                return(true);
            }
            else
            {
                var packageFrameworkNames = typeInfo.TargetFrameworks.Select(x => ParseFrameworkName(x)).ToList();
                foreach (var projectFramework in projectTargetFrameworks)
                {
                    if (packageFrameworkNames.Any(x => AreCompatible(projectFramework, new[] { x })))
                    {
                        // if at least any project target framework supports package - display it
                        return(true);
                    }
                }
            }

            return(false);
        }
        /// <summary>
        /// Checks if package supports any of project's target frameworks
        /// </summary>
        public static bool SupportsProjectTargetFrameworks(IPackageIndexModelInfo typeInfo, IEnumerable<TargetFrameworkMetadata> projectTargetFrameworks)
        {
            // if we find at least any framework in package that current project supports,
            // we show this package to user.
            if (typeInfo.TargetFrameworks == null 
                || !typeInfo.TargetFrameworks.Any()
                || typeInfo.TargetFrameworks.Any(x => x.Equals("Unsupported", StringComparison.OrdinalIgnoreCase)))
            {
                // In this case:
                //      if package did not specify any target frameworks
                //         or one of the frameworks is new and Nuget.Core can not recognize it - returning Unsupported
                //      we follow our default behavior and display as much as possible to the user, return true to show the package
                return true;
            }
            else
            {
                var packageFrameworkNames = typeInfo.TargetFrameworks.Select(x => DnxVersionUtility.ParseFrameworkName(x)).ToList();
                foreach (var projectFramework in projectTargetFrameworks)
                {
                    var projectFrameworkName = DnxVersionUtility.ParseFrameworkName(projectFramework.TargetFrameworkShortName);
                    if (packageFrameworkNames.Any(x => DnxVersionUtility.IsCompatible(projectFrameworkName, x)))
                    {
                        // if at least any project target framework supports package - display it
                        return true;
                    }
                }
            }

            return false;
        }
Exemple #3
0
        public void InstallPackage(Workspace workspace,
                                   Document document,
                                   IPackageIndexModelInfo packageInfo,
                                   IEnumerable <ProjectMetadata> projects,
                                   CancellationToken cancellationToken = default(CancellationToken))
        {
            Debug.Assert(packageInfo != null);

            ThreadHelper.JoinableTaskFactory.RunAsync(async delegate {
                foreach (var project in projects)
                {
                    try
                    {
                        var container = _serviceProvider.GetService <IComponentModel, SComponentModel>();
                        var projectSpecificInstallers = container.DefaultExportProvider.GetExportedValues <IProjectPackageInstaller>();
                        if (projectSpecificInstallers != null && projectSpecificInstallers.Any())
                        {
                            var supportedInstaller = projectSpecificInstallers.FirstOrDefault(x => x.SupportsProject(project.ProjectPath));
                            if (supportedInstaller != null)
                            {
                                if (await SafeExecuteActionAsync(
                                        delegate
                                {
                                    var frameworksToInstall = new List <FrameworkName>();
                                    var packageFrameworkNames = packageInfo.TargetFrameworks.Select(x => DnxVersionUtility.ParseFrameworkName(x))
                                                                .ToList();
                                    foreach (var projectFrameworkMetadata in project.TargetFrameworks)
                                    {
                                        var projectFrameworkName = DnxVersionUtility.ParseFrameworkName(projectFrameworkMetadata.TargetFrameworkShortName);
                                        if (projectFrameworkName != null && packageFrameworkNames.Any(x => DnxVersionUtility.IsCompatible(projectFrameworkName, x)))
                                        {
                                            frameworksToInstall.Add(projectFrameworkName);
                                        }
                                    }

                                    return(supportedInstaller.InstallPackageAsync(project.ProjectPath,
                                                                                  packageInfo.PackageName,
                                                                                  packageInfo.PackageVersion,
                                                                                  frameworksToInstall,
                                                                                  cancellationToken));
                                }))
                                {
                                    continue; // package installed successfully
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        // we should not throw here, since it would create an exception that may be
                        // visible to the user, instead just dump into debugger output or to package
                        // manager console.
                        // TODO Package manager console?
                        Debug.Write(e.ToString());
                    }
                }
            });
        }
        public void InstallPackage(Workspace workspace, 
                                   Document document,
                                   IPackageIndexModelInfo packageInfo, 
                                   IEnumerable<ProjectMetadata> projects, 
                                   CancellationToken cancellationToken = default(CancellationToken))
        {
            Debug.Assert(packageInfo != null);

            ThreadHelper.JoinableTaskFactory.RunAsync(async delegate {
                foreach (var project in projects)
                {
                    try
                    {
                        var container = _serviceProvider.GetService<IComponentModel, SComponentModel>();
                        var projectSpecificInstallers = container.DefaultExportProvider.GetExportedValues<IProjectPackageInstaller>();
                        if (projectSpecificInstallers != null && projectSpecificInstallers.Any())
                        {
                            var supportedInstaller = projectSpecificInstallers.FirstOrDefault(x => x.SupportsProject(project.ProjectPath));
                            if (supportedInstaller != null)
                            {
                                if (await SafeExecuteActionAsync(
                                    delegate 
                                    {
                                        var frameworksToInstall = new List<FrameworkName>();
                                        var packageFrameworkNames = packageInfo.TargetFrameworks.Select(x => DnxVersionUtility.ParseFrameworkName(x))
                                                                                                .ToList();
                                        foreach (var projectFrameworkMetadata in project.TargetFrameworks)
                                        {
                                            var projectFrameworkName = DnxVersionUtility.ParseFrameworkName(projectFrameworkMetadata.TargetFrameworkShortName);
                                            if (projectFrameworkName != null && packageFrameworkNames.Any(x => DnxVersionUtility.IsCompatible(projectFrameworkName, x)))
                                            {
                                                frameworksToInstall.Add(projectFrameworkName);
                                            }
                                        }

                                        return supportedInstaller.InstallPackageAsync(project.ProjectPath, 
                                                                                      packageInfo.PackageName, 
                                                                                      packageInfo.PackageVersion, 
                                                                                      frameworksToInstall, 
                                                                                      cancellationToken);
                                    }))
                                {
                                    continue; // package installed successfully
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        // we should not throw here, since it would create an exception that may be 
                        // visible to the user, instead just dump into debugger output or to package
                        // manager console.
                        // TODO Package manager console?
                        Debug.Write(e.ToString());
                    }
                }
            });
        }
Exemple #5
0
 public AddPackageOperation(IPackageInstaller packageInstaller,
                            Document document,
                            IPackageIndexModelInfo packageInfo,
                            IEnumerable <ProjectMetadata> projects,
                            string title)
 {
     _packageInstaller = packageInstaller;
     _document         = document;
     _packageInfo      = packageInfo;
     _projects         = projects;
     _title            = title;
 }
 public AddPackageOperation(IPackageInstaller packageInstaller, 
                            Document document,
                            IPackageIndexModelInfo packageInfo, 
                            IEnumerable<ProjectMetadata> projects,
                            string title)
 {
     _packageInstaller = packageInstaller;
     _document = document;
     _packageInfo = packageInfo;
     _projects = projects;
     _title = title;
 }
 public AddPackageCodeAction(IPackageInstaller packageInstaller,
                             IPackageIndexModelInfo packageInfo,
                             IEnumerable <ProjectMetadata> projects,
                             string titleFormat,
                             Func <CancellationToken, Task <Document> > createChangedDocument)
 {
     _packageInstaller      = packageInstaller;
     _packageInfo           = packageInfo;
     _projects              = projects;
     _createChangedDocument = createChangedDocument;
     _titleFormat           = titleFormat;
 }
 public AddPackageCodeAction(IPackageInstaller packageInstaller,
                             IPackageIndexModelInfo packageInfo, 
                             IEnumerable<ProjectMetadata> projects,
                             string titleFormat, 
                             Func<CancellationToken, Task<Document>> createChangedDocument)
 {
     _packageInstaller = packageInstaller;
     _packageInfo = packageInfo;
     _projects = projects;
     _createChangedDocument = createChangedDocument;
     _titleFormat = titleFormat;
 }
Exemple #9
0
 private static bool PackageExistsInTheProject(IPackageIndexModelInfo packageInfo, IEnumerable <TargetFrameworkMetadata> projectTargetFrameworks, bool allowHigherVersions)
 {
     if (allowHigherVersions)
     {
         var packageVersion = new NuGetVersion(packageInfo.PackageVersion);
         return(projectTargetFrameworks.Any(x => x.Packages.Any(p =>
         {
             var projecsPackageVersion = new NuGetVersion(p.Value);
             // if project has package with given name and version less than in index
             return p.Key.Equals(packageInfo.PackageName) && projecsPackageVersion <= packageVersion;
         }
                                                                )));
     }
     else
     {
         return(projectTargetFrameworks.Any(x => x.Packages.Any(p => p.Key.Equals(packageInfo.PackageName))));
     }
 }
 private static bool PackageExistsInTheProject(IPackageIndexModelInfo packageInfo, IEnumerable<TargetFrameworkMetadata> projectTargetFrameworks, bool allowHigherVersions)
 {
     if (allowHigherVersions)
     {
         var packageVersion = new SemanticVersion(packageInfo.PackageVersion);
         return projectTargetFrameworks.Any(x => x.Packages.Any(p =>
                 {
                     var projecsPackageVersion = new SemanticVersion(p.Value);
                     // if project has package with given name and version less than in index
                     return p.Key.Equals(packageInfo.PackageName) && projecsPackageVersion <= packageVersion;
                 }
         ));
     }
     else
     {
        return projectTargetFrameworks.Any(x => x.Packages.Any(p => p.Key.Equals(packageInfo.PackageName)));
     }
 }