1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
5
using System.Collections.Generic;
6
using ICSharpCode.SharpDevelop.Project;
9
namespace ICSharpCode.PackageManagement
11
public class PackageReferenceInstaller : IPackageReferenceInstaller
13
IPackageActionRunner packageActionRunner;
14
IPackageManagementProjectFactory projectFactory;
15
IPackageRepositoryCache packageRepositoryCache;
17
public PackageReferenceInstaller(IPackageRepositoryCache packageRepositoryCache)
19
packageRepositoryCache,
20
PackageManagementServices.PackageActionRunner,
21
new PackageManagementProjectFactory(PackageManagementServices.PackageManagementEvents))
25
public PackageReferenceInstaller(
26
IPackageRepositoryCache packageRepositoryCache,
27
IPackageActionRunner packageActionRunner,
28
IPackageManagementProjectFactory projectFactory)
30
this.packageRepositoryCache = packageRepositoryCache;
31
this.packageActionRunner = packageActionRunner;
32
this.projectFactory = projectFactory;
35
public void InstallPackages(
36
IEnumerable<PackageReference> packageReferences,
37
MSBuildBasedProject project)
39
List<InstallPackageAction> actions = GetInstallPackageActions(packageReferences, project);
40
packageActionRunner.Run(actions);
43
List<InstallPackageAction> GetInstallPackageActions(
44
IEnumerable<PackageReference> packageReferences,
45
MSBuildBasedProject project)
47
var actions = new List<InstallPackageAction>();
49
IPackageManagementProject packageManagementProject = CreatePackageManagementProject(project);
50
foreach (PackageReference packageReference in packageReferences) {
51
InstallPackageAction action = CreateInstallPackageAction(packageManagementProject, packageReference);
58
IPackageManagementProject CreatePackageManagementProject(MSBuildBasedProject project)
60
IPackageRepository repository = packageRepositoryCache.CreateAggregateRepository();
61
return projectFactory.CreateProject(repository, project);
64
InstallPackageAction CreateInstallPackageAction(
65
IPackageManagementProject project,
66
PackageReference packageReference)
68
InstallPackageAction action = project.CreateInstallPackageAction();
69
action.PackageId = packageReference.Id;
70
action.PackageVersion = packageReference.Version;