void CreatePackageReferenceNode( bool installed = true, bool installPending = false, PackageIdentity updatedPackage = null) { node = new PackageReferenceNode(null, packageReference, installed, installPending, updatedPackage); }
void Run(string packageId, string packageVersion) { var packageReference = new PackageReference( packageId, new SemanticVersion(packageVersion), null, null, false); var node = new PackageReferenceNode(packageReference, true); reinstaller.Run(node); }
ReinstallNuGetPackageAction CreateReinstallPackageAction( PackageReferenceNode packageReference, IMonoDevelopSolutionManager solutionManager) { var action = new ReinstallNuGetPackageAction( packageReference.Project, solutionManager); action.PackageId = packageReference.Id; action.Version = packageReference.Version; return(action); }
public void Run(PackageReferenceNode packageReferenceNode, ProgressMonitorStatusMessage progressMessage) { try { IPackageManagementProject project = solution.GetProject(packageReferenceNode.Project); ReinstallPackageAction action = project.CreateReinstallPackageAction(); action.PackageId = packageReferenceNode.Id; action.PackageVersion = packageReferenceNode.Version; runner.Run(progressMessage, action); } catch (Exception ex) { runner.ShowError(progressMessage, ex); } }
public void GetPackageReferencesNodes_OnePackageReferenceButPackageNotInstalledAndNoUpdatedPackages_ReturnsOneNode() { CreateNode(); AddPackageReferenceToProject("MyPackage", "1.0"); NoUpdatedPackages(); List <PackageReferenceNode> nodes = packagesFolderNode.GetPackageReferencesNodes().ToList(); PackageReferenceNode referenceNode = nodes.FirstOrDefault(); Assert.AreEqual(1, nodes.Count); Assert.IsFalse(referenceNode.Installed); Assert.AreEqual("MyPackage", referenceNode.GetLabel()); }
void Run(string packageId, string packageVersion) { var packageReference = new PackageReference( packageId, new SemanticVersion(packageVersion), null, null, false); var parentNode = new TestableProjectPackagesFolderNode(project.FakeDotNetProject, null); var node = new PackageReferenceNode(parentNode, packageReference, true); reinstaller.Run(node); }
public void GetPackageReferencesNodes_OnePackageReferenceWithUpdatedPackagesButPackageNotRestored_ReturnsOneNodeWithUpdatedVersionInformationInLabel() { CreateNode(); AddPackageReferenceToProject("MyPackage", "1.0"); AddUpdatedPackageForProject("MyPackage", "1.2"); List <PackageReferenceNode> nodes = packagesFolderNode.GetPackageReferencesNodes().ToList(); PackageReferenceNode referenceNode = nodes.FirstOrDefault(); Assert.AreEqual(1, nodes.Count); Assert.AreEqual("1.2", referenceNode.UpdatedVersion.ToString()); Assert.AreEqual("<span color='#c99c00'>MyPackage</span> <span color='grey'>(1.2 available)</span>", referenceNode.GetLabel()); Assert.AreEqual(Stock.ReferenceWarning, referenceNode.GetIconId()); }
public void Run(PackageReferenceNode packageReferenceNode, ProgressMonitorStatusMessage progressMessage) { try { var solutionManager = PackageManagementServices.Workspace.GetSolutionManager(packageReferenceNode.Project.ParentSolution); var action = new ReinstallNuGetPackageAction( packageReferenceNode.Project, solutionManager); action.PackageId = packageReferenceNode.Id; action.Version = packageReferenceNode.Version; runner.Run(progressMessage, action); } catch (Exception ex) { runner.ShowError(progressMessage, ex); } }
void RemovePackage(PackageReferenceNode packageReferenceNode, ProgressMonitorStatusMessage progressMessage) { IPackageManagementProject project = PackageManagementServices.Solution.GetActiveProject(); UninstallPackageAction action = project.CreateUninstallPackageAction(); action.Package = project.FindPackage(packageReferenceNode.Id); if (action.Package != null) { PackageManagementServices.BackgroundPackageActionRunner.Run(progressMessage, action); } else { ShowMissingPackageError(progressMessage, packageReferenceNode); } }
public void GetPackageReferencesNodes_OnePackageReferenceWithUpdatedPackages_ReturnsOneNodeWithUpdatedVersionInformationInLabel() { CreateNode(); PackageReference packageReference = AddPackageReferenceToProject("MyPackage", "1.0"); PackageIsInstalledInProject(packageReference); AddUpdatedPackageForProject("MyPackage", "1.2"); List <PackageReferenceNode> nodes = packagesFolderNode.GetPackageReferencesNodes().ToList(); PackageReferenceNode referenceNode = nodes.FirstOrDefault(); Assert.AreEqual(1, nodes.Count); Assert.AreEqual("1.2", referenceNode.UpdatedVersion.ToString()); Assert.AreEqual("MyPackage <span color='grey'>(1.2 available)</span>", referenceNode.GetLabel()); }
public async Task GetPackageReferencesNodes_OnePackageReferenceButNoUpdatedPackages_ReturnsOneNode() { CreateNode(); PackageReference packageReference = AddPackageReferenceToProject("MyPackage", "1.0"); PackageIsInstalledInProject(packageReference); NoUpdatedPackages(); await RefreshNodePackages(); List <PackageReferenceNode> nodes = packagesFolderNode.GetPackageReferencesNodes().ToList(); PackageReferenceNode referenceNode = nodes.FirstOrDefault(); Assert.AreEqual(1, nodes.Count); Assert.IsTrue(referenceNode.Installed); Assert.AreEqual("MyPackage", referenceNode.GetLabel()); Assert.AreEqual(String.Empty, packagesFolderNode.GetSecondaryLabel()); }
IPackageAction CreateUninstallPackageAction(PackageReferenceNode packageReferenceNode) { var solutionManager = PackageManagementServices.Workspace.GetSolutionManager(packageReferenceNode.Project.ParentSolution); if (packageReferenceNode.NeedsRestoreBeforeUninstall()) { return(new RestoreAndUninstallNuGetPackageAction(solutionManager, packageReferenceNode.Project) { PackageId = packageReferenceNode.Id, Version = packageReferenceNode.Version }); } return(new UninstallNuGetPackageAction(solutionManager, packageReferenceNode.Project) { PackageId = packageReferenceNode.Id }); }
public async Task GetPackageReferencesNodes_OnePackageReferenceWithUpdatedPackagesButPackageNotRestored_ReturnsOneNodeWithUpdatedVersionInformationInLabel() { CreateNode(); AddPackageReferenceToProject("MyPackage", "1.0"); AddUpdatedPackageForProject("MyPackage", "1.2"); await RefreshNodePackages(); List <PackageReferenceNode> nodes = packagesFolderNode.GetPackageReferencesNodes().ToList(); PackageReferenceNode referenceNode = nodes.FirstOrDefault(); Assert.AreEqual(1, nodes.Count); Assert.AreEqual("1.2", referenceNode.UpdatedVersion.ToString()); Assert.AreEqual("MyPackage", referenceNode.GetLabel()); Assert.AreEqual("(1.2 available)", referenceNode.GetSecondaryLabel()); Assert.AreEqual(Stock.Reference, referenceNode.GetIconId()); Assert.IsTrue(referenceNode.IsDisabled()); }
public async Task GetPackageReferencesNodes_OnePackageReferenceWithUpdatedPackages_ReturnsOneNodeWithUpdatedVersionInformationInLabel() { CreateNode(); PackageReference packageReference = AddPackageReferenceToProject("MyPackage", "1.0"); PackageIsInstalledInProject(packageReference); AddUpdatedPackageForProject("MyPackage", "1.2"); await RefreshNodePackages(); List <PackageReferenceNode> nodes = packagesFolderNode.GetPackageReferencesNodes().ToList(); PackageReferenceNode referenceNode = nodes.FirstOrDefault(); Assert.AreEqual(1, nodes.Count); Assert.AreEqual("1.2", referenceNode.UpdatedVersion.ToString()); Assert.AreEqual("MyPackage", referenceNode.GetLabel()); Assert.AreEqual("(1.0)", referenceNode.GetSecondaryLabel()); Assert.AreEqual("1.2 available", referenceNode.GetStatusMessage()); Assert.AreEqual("md-package-update", referenceNode.GetStatusIconId().Name); }
void ShowMissingPackageError(ProgressMonitorStatusMessage progressMessage, PackageReferenceNode packageReferenceNode) { string message = GettextCatalog.GetString("Unable to find package {0} {1} to remove it from the project. Please restore the package first.", packageReferenceNode.Id, packageReferenceNode.Version); PackageManagementServices.BackgroundPackageActionRunner.ShowError(progressMessage, message); }
public DependencyGraph Analyze(string packageId, string version, string framework) { var package = new PackageIdentity(packageId, NuGetVersion.Parse(version)); var settings = Settings.LoadDefaultSettings(root: null, configFileName: null, machineWideSettings: null); var sourceRepositoryProvider = new SourceRepositoryProvider(settings, Repository.Provider.GetCoreV3()); var nuGetFramework = NuGetFramework.ParseFolder(framework); var nugetLogger = _logger.AsNuGetLogger(); using (var cacheContext = new SourceCacheContext()) { var repositories = sourceRepositoryProvider.GetRepositories(); var resolvedPackages = new ConcurrentDictionary <PackageIdentity, SourcePackageDependencyInfo>(PackageIdentityComparer.Default); ResolvePackage(package, nuGetFramework, cacheContext, nugetLogger, repositories, resolvedPackages).Wait(); var availablePackages = new HashSet <SourcePackageDependencyInfo>(resolvedPackages.Values); var resolverContext = new PackageResolverContext( DependencyBehavior.Lowest, new[] { packageId }, Enumerable.Empty <string>(), Enumerable.Empty <PackageReference>(), Enumerable.Empty <PackageIdentity>(), availablePackages, sourceRepositoryProvider.GetRepositories().Select(s => s.PackageSource), nugetLogger); var resolver = new PackageResolver(); var prunedPackages = resolver.Resolve(resolverContext, CancellationToken.None) .Select(x => resolvedPackages[x]); var rootNode = new PackageReferenceNode(package.Id, package.Version.ToString()); var packageNodes = new Dictionary <string, PackageReferenceNode>(StringComparer.OrdinalIgnoreCase); var builder = new DependencyGraph.Builder(rootNode); foreach (var target in prunedPackages) { var downloadResource = target.Source.GetResource <DownloadResource>(); var downloadResult = downloadResource.GetDownloadResourceResultAsync(new PackageIdentity(target.Id, target.Version), new PackageDownloadContext(cacheContext), SettingsUtility.GetGlobalPackagesFolder(settings), nugetLogger, CancellationToken.None).Result; var libItems = downloadResult.PackageReader.GetLibItems(); var reducer = new FrameworkReducer(); var nearest = reducer.GetNearest(nuGetFramework, libItems.Select(x => x.TargetFramework)); var assemblyReferences = libItems .Where(x => x.TargetFramework.Equals(nearest)) .SelectMany(x => x.Items) .Where(x => Path.GetExtension(x).Equals(".dll", StringComparison.OrdinalIgnoreCase)) .Select(x => new AssemblyReferenceNode(Path.GetFileName(x))); var frameworkItems = downloadResult.PackageReader.GetFrameworkItems(); nearest = reducer.GetNearest(nuGetFramework, frameworkItems.Select(x => x.TargetFramework)); assemblyReferences = assemblyReferences.Concat(frameworkItems .Where(x => x.TargetFramework.Equals(nearest)) .SelectMany(x => x.Items) .Select(x => new AssemblyReferenceNode(x))); var packageReferenceNode = new PackageReferenceNode(target.Id, target.Version.ToString()); builder.WithNode(packageReferenceNode); builder.WithNodes(assemblyReferences); builder.WithEdges(assemblyReferences.Select(x => new Edge(packageReferenceNode, x))); packageNodes.Add(target.Id, packageReferenceNode); } foreach (var target in prunedPackages) { var packageReferenceNode = packageNodes[target.Id]; builder.WithEdges(target.Dependencies.Select(x => new Edge(packageReferenceNode, packageNodes[x.Id], x.VersionRange.ToString()))); } return(builder.Build()); } }
private DependencyGraph.Builder CreateBuilder(IProjectAnalyzer projectAnalyzer, string projectPath, DependencyGraph.Builder builder = null, string framework = null) { var analyzeResults = string.IsNullOrEmpty(framework) ? projectAnalyzer.Build() : projectAnalyzer.Build(framework); var analyzerResult = string.IsNullOrEmpty(framework) ? analyzeResults.FirstOrDefault() : analyzeResults[framework]; if (analyzerResult == null) { // Todo: Something went wrong, log and return better exception. throw new InvalidOperationException("Unable to load project."); } var projectNode = new ProjectReferenceNode(projectPath); if (builder == null) { builder = new DependencyGraph.Builder(projectNode); } else { builder.WithNode(projectNode); builder.WithEdge(new Edge(builder.Root, projectNode)); } var projectAssetsFilePath = analyzerResult.GetProjectAssetsFilePath(); if (!File.Exists(projectAssetsFilePath)) { if (analyzerResult.IsNetSdkProject()) { // a new project doesn't have an asset file throw new InvalidOperationException($"{projectAssetsFilePath} not found. Please run 'dotnet restore'"); } // Old csproj var oldStylePackageReferences = analyzerResult.GetItems("Reference").Where(x => x.ItemSpec.Contains("Version=")); foreach (var reference in oldStylePackageReferences) { var split = reference.ItemSpec.Split(','); var version = split.Single(s => s.Contains("Version="))?.Split('=')[1]; var name = reference.ItemSpec.Split(',')[0]; var node = new PackageReferenceNode(name, version); builder.WithNode(node); builder.WithEdge(new Edge(projectNode, node, version)); } } else { // New csproj var lockFile = new LockFileFormat().Read(projectAssetsFilePath); var targetFramework = analyzerResult.GetTargetFramework(); var runtimeIdentifier = analyzerResult.GetRuntimeIdentifier(); var libraries = lockFile.Targets.Single( x => x.TargetFramework == targetFramework && x.RuntimeIdentifier == runtimeIdentifier) .Libraries.Where(x => x.IsPackage()).ToList(); var libraryNodes = new Dictionary <string, PackageReferenceNode>(StringComparer.OrdinalIgnoreCase); foreach (var library in libraries) { var libraryNode = library.ToNode(); builder.WithNode(libraryNode); // Overwrite any previous additions that may have been added by the loop below. libraryNodes[libraryNode.PackageId] = libraryNode; // Not all dependencies are necessarily included in the list of libraries // for the current target framework and runtime identifier. Add these to libraryNodes // so we can still record these dependencies. foreach (var dependency in library.Dependencies) { // Add min version in version range if this dependency doesn't exist libraryNodes.TryAdd( dependency.Id, new PackageReferenceNode(dependency.Id, dependency.VersionRange.MinVersion.ToString())); } if (library.FrameworkAssemblies.Count > 0) { var assemblyNodes = library.FrameworkAssemblies .Select(x => new AssemblyReferenceNode($"{x}.dll")); builder.WithNodes(assemblyNodes); builder.WithEdges(assemblyNodes .Select(x => new Edge(libraryNode, x))); } if (library.RuntimeAssemblies.Count > 0) { var assemblyNodes = library.RuntimeAssemblies .Select(x => new AssemblyReferenceNode(Path.GetFileName(x.Path))) .Where(x => x.Id != "_._"); if (assemblyNodes.Any()) { builder.WithNodes(assemblyNodes); builder.WithEdges(assemblyNodes .Select(x => new Edge(libraryNode, x))); } } //if (library.CompileTimeAssemblies.Count > 0) //{ // var assemblyNodes = library.CompileTimeAssemblies // .Select(x => new AssemblyReferenceNode(Path.GetFileName(x.Path))); // builder.WithNodes(assemblyNodes); // builder.WithEdges(assemblyNodes // .Select(x => new Edge(libraryNode, x))); //} } foreach (var library in libraries) { var libraryNode = library.ToNode(); if (library.Dependencies.Count > 0) { builder.WithEdges(library.Dependencies .Select(x => new Edge(libraryNode, libraryNodes[x.Id], x.VersionRange.ToString()))); } } // Ignore unversioned references like implicit SDK packages builder.WithEdges(analyzerResult.GetItems("PackageReference") .Where(x => x.Metadata.ContainsKey("Version")) .Select(x => new Edge(projectNode, libraryNodes[x.ItemSpec], x.Metadata["Version"]))); } var references = analyzerResult.References.Select(x => new AssemblyReferenceNode(Path.GetFileName(x))); builder.WithNodes(references); builder.WithEdges(references.Select(x => new Edge(projectNode, x))); return(builder); }
void RemovePackage(PackageReferenceNode packageReferenceNode, ProgressMonitorStatusMessage progressMessage) { IPackageAction action = CreateUninstallPackageAction(packageReferenceNode); PackageManagementServices.BackgroundPackageActionRunner.Run(progressMessage, action); }
public void Run(PackageReferenceNode packageReferenceNode) { ProgressMonitorStatusMessage progressMessage = ProgressMonitorStatusMessageFactory.CreateRetargetingSinglePackageMessage(packageReferenceNode.Id); Run(packageReferenceNode, progressMessage); }