public static async Task Extract (
			Solution solution,
			PackageIdentity packageIdentity,
			DownloadResourceResult downloadResult,
			CancellationToken token)
		{
			string globalPackagesFolder = await GetPackagesDirectory (solution);

			var defaultPackagePathResolver = new VersionFolderPathResolver (globalPackagesFolder);

			string hashPath = defaultPackagePathResolver.GetHashPath (packageIdentity.Id, packageIdentity.Version);

			if (File.Exists (hashPath))
				return;

			var versionFolderPathContext = new VersionFolderPathContext (
				packageIdentity,
				globalPackagesFolder,
				NullLogger.Instance,
				PackageSaveMode.Defaultv3,
				PackageExtractionBehavior.XmlDocFileSaveMode);

			downloadResult.PackageStream.Position = 0;
			await PackageExtractor.InstallFromSourceAsync (
				stream => downloadResult.PackageStream.CopyToAsync (stream, BufferSize, token),
				versionFolderPathContext,
				token);
		}
		public static string GetPackagesRootDirectory (Solution solution)
		{
			var solutionManager = PackageManagementServices.Workspace.GetSolutionManager (solution);
			string globalPackagesPath = SettingsUtility.GetGlobalPackagesFolder (solutionManager.Settings);

			return new FilePath (globalPackagesPath).FullPath;
		}
        public IEnumerable<string> GetAllProjectFileNames(IFileSystem fileSystem, string solutionFile)
        {
            var solution = new Solution(fileSystem, solutionFile);
            var solutionDirectory = Path.GetDirectoryName(fileSystem.GetFullPath(solutionFile));

            return solution.Projects.Where(p => !p.IsSolutionFolder)
                .Select(p => Path.Combine(solutionDirectory, p.RelativePath));
        }
        public void Init()
        {
            var solution = new Solution(this.Solution.DirectoryName + Path.DirectorySeparatorChar + this.Solution.SolutionName);

            Trace.TraceInformation("Processing solution <"+solution.SolutionName+">");

            using (var pc = new ProjectCollection())
            {
                foreach (ProjectInSolution prj in solution.Projects.Where(p => !p.IsSolutionFolder))
                {
                    var project = new ProjectProcessor(pc.LoadProject(Path.Combine(solution.DirectoryName, prj.RelativePath)));
                    project.Init();
                }
            }
        }
 public SolutionProcessor(string solution)
 {
     var configuration = Assembly.GetEntryAssembly().GetCustomAttribute<AssemblyConfigurationAttribute>();
     this.Solution = new Solution(solution);
 }
		async Task RestoreAndCheckForUpdates (Solution solution)
		{
			bool checkUpdatesAfterRestore = ShouldCheckForUpdates && AnyProjectHasPackages (solution);

			var action = new RestoreAndCheckForUpdatesAction (solution) {
				CheckForUpdatesAfterRestore = checkUpdatesAfterRestore
			};
			bool packagesToRestore = await action.HasMissingPackages ();
			if (packagesToRestore) {
				ProgressMonitorStatusMessage message = ProgressMonitorStatusMessageFactory.CreateRestoringPackagesInSolutionMessage ();
				PackageManagementServices.BackgroundPackageActionRunner.Run (message, action);
			} else if (checkUpdatesAfterRestore) {
				CheckForUpdates (solution);
			}
		}
		void ClearUpdatedPackagesInSolution (Solution solution)
		{
			PackageManagementServices.UpdatedPackagesInWorkspace.Clear (new SolutionProxy (solution));
		}
		void CheckForUpdates (Solution solution)
		{
			CheckForUpdates (new SolutionProxy (solution));
		}
		bool AnyProjectHasPackages (Solution solution)
		{
			return solution
				.GetAllProjectsWithPackages ()
				.Any ();
		}
		static Task<string> GetPackagesDirectory (Solution solution)
		{
			return Runtime.RunInMainThread (() => {
				return MSBuildNuGetImportGenerator.GetPackagesRootDirectory (solution);
			});
		}