/// <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; }
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()); } } }); }
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; }
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))); } }