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 override async Task<bool> InstallPackageAsync (
			PackageIdentity packageIdentity,
			DownloadResourceResult downloadResourceResult,
			INuGetProjectContext nuGetProjectContext,
			CancellationToken token)
		{
			return await Runtime.RunInMainThread (async () => {

				// Check if this NuGet package is already installed and should be removed.
				PackageReference existingPackageReference = project.FindPackageReference (packageIdentity);
				if (existingPackageReference != null) {
					if (ShouldRemoveExistingPackageReference (existingPackageReference, packageIdentity)) {
						project.PackageReferences.Remove (existingPackageReference);
					} else {
						nuGetProjectContext.Log (
							MessageLevel.Info,
							GettextCatalog.GetString ("Package '{0}' already installed.", packageIdentity)); 
						return true;
					}
				}

				bool developmentDependency = false;
				if (IsNuGetBuildPackagingPackage (packageIdentity)) {
					await GlobalPackagesExtractor.Extract (project.ParentSolution, packageIdentity, downloadResourceResult, token);

					developmentDependency = true;
					GenerateNuGetBuildPackagingTargets (packageIdentity);
				}

				var packageReference = new PackageReference (packageIdentity);
				if (developmentDependency)
					packageReference.PrivateAssets = "All";
				project.PackageReferences.Add (packageReference);
				await SaveProject ();
				return true;
			});
		}
 public override Task<bool> InstallPackageAsync(PackageIdentity packageIdentity, DownloadResourceResult downloadResourceResult,
     INuGetProjectContext nuGetProjectContext, CancellationToken token)
 {
     return Task.FromResult(true);
 }
Example #4
0
 // This gets called for every package install, including dependencies, and is our only chance to handle dependency PackageIdentity instances
 public override Task<bool> InstallPackageAsync(PackageIdentity packageIdentity, DownloadResourceResult downloadResourceResult,
     INuGetProjectContext nuGetProjectContext, CancellationToken token)
 {
     _packageIdentities.Add(packageIdentity);
     return base.InstallPackageAsync(packageIdentity, downloadResourceResult, nuGetProjectContext, token);
 }
		public override Task<bool> InstallPackageAsync (PackageIdentity packageIdentity, DownloadResourceResult downloadResourceResult, INuGetProjectContext nuGetProjectContext, CancellationToken token)
		{
			throw new NotImplementedException ();
		}