public UpdatedNuGetPackagesInProject (
			IDotNetProject project,
			IEnumerable<PackageIdentity> packages)
		{
			Project = project;
			this.packages = packages.ToList ();
		}
		public PackageManagementEventArgs (
			IDotNetProject project,
			PackageEventArgs e)
			: this (project, e.Identity, e.InstallPath)
		{
			PackageFilePath = GetPackageFilePath (e);
		}
		public PackageCompatibilityRunner (IDotNetProject project)
			: this (
				project,
				PackageManagementServices.ProgressMonitorFactory,
				PackageManagementServices.PackageManagementEvents)
		{
		}
		public ProjectPackagesFolderNode (
			IDotNetProject project,
			IUpdatedPackagesInSolution updatedPackagesInSolution)
		{
			this.project = project;
			this.updatedPackagesInSolution = updatedPackagesInSolution;
		}
		protected virtual void OnProjectTargetFrameworkChanged (IDotNetProject project)
		{
			var handler = ProjectTargetFrameworkChanged;
			if (handler != null) {
				handler (this, new ProjectTargetFrameworkChangedEventArgs (project));
			}
		}
		public UpdatedPackagesInProject (
			IDotNetProject project,
			IEnumerable<IPackageName> packages)
		{
			Project = project;
			this.packages = packages.ToList ();
		}
		bool PackageNeedsReinstall (IDotNetProject project, IPackage package, FrameworkName packageTargetFramework)
		{
			var compatibility = new PackageCompatibility (project, package, packageTargetFramework);
			compatibility.CheckCompatibility ();
			compatibilityReport.Add (compatibility);

			return compatibility.ShouldReinstallPackage;
		}
		public TestableMonoDevelopProjectSystem (IDotNetProject project)
			: this (
				project,
				new FakeFileService (project),
				new FakePackageManagementProjectService (),
				new FakeLogger ())
		{
		}
		public TestableMonoDevelopProjectSystem (IDotNetProject project)
			: this (
				project,
				new FakeNuGetProjectContext (),
				new FakeFileService (project),
				new PackageManagementEvents ())
		{
		}
		public PackageManagementEventArgs (
			IDotNetProject project,
			PackageIdentity package,
			string installPath)
		{
			Project = project;
			Package = package;
			InstallPath = installPath;
		}
		public NuGetPackageEventsMonitor (
			IDotNetProject project,
			IPackageManagementEvents packageManagementEvents)
			: this (
				project,
				new PackageEventsProvider (),
				packageManagementEvents)
		{
		}
		public PackageCompatibilityRunner (
			IDotNetProject project,
			IPackageManagementProgressMonitorFactory progressMonitorFactory,
			IPackageManagementEvents packageManagementEvents)
		{
			this.project = project;
			this.progressMonitorFactory = progressMonitorFactory;
			this.packageManagementEvents = packageManagementEvents;
		}
		public ReinstallNuGetPackageAction (
			IDotNetProject project,
			IMonoDevelopSolutionManager solutionManager)
			: this (
				project,
				solutionManager,
				new NuGetProjectContext (),
				PackageManagementServices.PackageManagementEvents)
		{
		}
		public PackageCompatibilityRunner (IDotNetProject project)
			: this (
				project,
				PackageManagementServices.Solution,
				PackageManagementServices.RegisteredPackageRepositories,
				PackageManagementServices.ProgressMonitorFactory,
				PackageManagementServices.PackageManagementEvents,
				PackageManagementServices.ProgressProvider)
		{
		}
		public TestableAllPackagesViewModel (
			IMonoDevelopSolutionManager solutionManager,
			IDotNetProject dotNetProject)
			: this (
				solutionManager,
				dotNetProject,
				new FakeNuGetProjectContext (),
				new RecentNuGetPackagesRepository ())
		{
		}
		UpdatedNuGetPackagesProvider CreateProvider (IDotNetProject project)
		{
			var solutionManager = GetSolutionManager (project.ParentSolution);
			var nugetProject = CreateNuGetProject (solutionManager, project);
			return new UpdatedNuGetPackagesProvider (
				project,
				solutionManager,
				nugetProject,
				cancellationTokenSource.Token);
		}
		public TestableAllPackagesViewModel (
			IMonoDevelopSolutionManager solutionManager,
			IDotNetProject dotNetProject,
			FakeNuGetProjectContext projectContext,
			RecentNuGetPackagesRepository recentPackagesRepository)
			: base (solutionManager, dotNetProject, projectContext, recentPackagesRepository)
		{
			FakeNuGetProjectContext = projectContext;
			RecentPackagesRepository = recentPackagesRepository;
		}
		TestableMonoDevelopProjectSystem (
			IDotNetProject project,
			IPackageManagementFileService fileService,
			IPackageManagementProjectService projectService,
			FakeLogger logger)
			: base (project, fileService, projectService, GuiSyncDispatcher)
		{
			FakeFileService = (FakeFileService)fileService;
			FakeProjectService = (FakePackageManagementProjectService)projectService;
			Logger = logger;
		}
		public UpdateNuGetPackageAction (
			IMonoDevelopSolutionManager solutionManager,
			IDotNetProject dotNetProject)
			: this (
				solutionManager,
				dotNetProject,
				new NuGetProjectContext (),
				new MonoDevelopNuGetPackageManager (solutionManager),
				PackageManagementServices.PackageManagementEvents)
		{
		}
		protected ProjectPackagesFolderNode (
			IDotNetProject project,
			IUpdatedNuGetPackagesInWorkspace updatedPackagesInWorkspace,
			bool createNuGetProject)
		{
			this.project = project;
			this.updatedPackagesInWorkspace = updatedPackagesInWorkspace;

			if (createNuGetProject)
				CreateInitNuGetProject ();
		}
		public TestablePackageCompatibilityRunner (
			IDotNetProject project,
			IPackageManagementProgressMonitorFactory progressMonitorFactory,
			IPackageManagementEvents packageManagementEvents)
			: base (
				project,
				progressMonitorFactory,
				packageManagementEvents)
		{
			PackageReferenceFile = new PackageReferenceFile (FileSystem, "packages.config");
		}
		TestableMonoDevelopProjectSystem (
			IDotNetProject project,
			FakeNuGetProjectContext context,
			IPackageManagementFileService fileService,
			PackageManagementEvents packageManagementEvents)
			: base (project, context, fileService, packageManagementEvents, GuiSyncDispatcher, GuiSyncDispatcherFunc)
		{
			FakeNuGetProjectContext = context;
			FakeFileService = (FakeFileService)fileService;
			PackageManagementEvents = packageManagementEvents;
		}
		public UpdatePackagesProgressMonitorStatusMessage (
			IDotNetProject project,
			string packagesUpToDateMessage,
			string packagesUpToDateWarningMessage,
			ProgressMonitorStatusMessage message)
			: this (
				new IDotNetProject [] { project },
				packagesUpToDateMessage,
				packagesUpToDateWarningMessage,
				message)
		{
		}
		protected override InstallNuGetPackageAction CreateInstallAction (
			IMonoDevelopSolutionManager solutionManager,
			IDotNetProject project,
			IEnumerable<SourceRepository> repositories)
		{
			InstallAction = new TestableInstallNuGetPackageAction (
				repositories,
				(FakeSolutionManager)solutionManager,
				(FakeDotNetProject)project);

			return InstallAction;
		}
		public PackageManagementProject (
			IPackageRepository sourceRepository,
			IDotNetProject project,
			IPackageManagementEvents packageManagementEvents,
			IPackageManagerFactory packageManagerFactory)
		{
			SourceRepository = sourceRepository;
			this.project = project;
			this.packageManagementEvents = packageManagementEvents;
			
			packageManager = packageManagerFactory.CreatePackageManager (sourceRepository, project);
			projectManager = packageManager.ProjectManager;
		}
		public NuGetPackageEventsMonitor (
			IDotNetProject project,
			IPackageEventsProvider provider,
			IPackageManagementEvents packageManagementEvents)
		{
			this.project = project;
			packageEvents = provider.GetPackageEvents ();
			this.packageManagementEvents = (PackageManagementEvents)packageManagementEvents;

			packageEvents.PackageInstalled += PackageInstalled;
			packageEvents.PackageUninstalling += PackageUninstalling;
			packageEvents.PackageUninstalled += PackageUninstalled;
		}
		public InstallNuGetPackageAction (
			IEnumerable<SourceRepository> primarySources,
			IMonoDevelopSolutionManager solutionManager,
			IDotNetProject dotNetProject,
			INuGetProjectContext projectContext)
			: this (
				primarySources,
				null,
				solutionManager,
				dotNetProject,
				projectContext)
		{
		}
		public ISharpDevelopPackageManager CreatePackageManager(
			IPackageRepository sourceRepository,
			IDotNetProject project)
		{
			SolutionPackageRepository solutionPackageRepository = CreateSolutionPackageRepository (project.ParentSolution);
			IProjectSystem projectSystem = CreateProjectSystem (project.DotNetProject);
			PackageOperationsResolverFactory packageOperationResolverFactory = new PackageOperationsResolverFactory();
			
			return new SharpDevelopPackageManager(
				sourceRepository,
				projectSystem,
				solutionPackageRepository,
				packageOperationResolverFactory);
		}
		public UninstallNuGetPackageAction (
			IMonoDevelopSolutionManager solutionManager,
			IDotNetProject dotNetProject,
			INuGetProjectContext projectContext,
			INuGetPackageManager packageManager,
			IPackageManagementEvents packageManagementEvents)
		{
			this.dotNetProject = dotNetProject;
			this.context = projectContext;
			this.packageManager = packageManager;
			this.packageManagementEvents = packageManagementEvents;

			project = solutionManager.GetNuGetProject (dotNetProject);
		}
		public ReinstallNuGetPackageAction (
			IDotNetProject project,
			IMonoDevelopSolutionManager solutionManager,
			INuGetProjectContext projectContext,
			IPackageManagementEvents packageManagementEvents)
		{
			this.context = projectContext;
			this.packageManagementEvents = packageManagementEvents;

			var repositories = solutionManager.CreateSourceRepositoryProvider ().GetRepositories ();

			installAction = CreateInstallAction (solutionManager, project, repositories);
			uninstallAction = CreateUninstallAction (solutionManager, project);
		}