| File: IDE\IPackageRestoreManager.cs | Web Access |
| Project: src\nuget-client\src\NuGet.Core\NuGet.PackageManagement\NuGet.PackageManagement.csproj (NuGet.PackageManagement) |
// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #nullable disable using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using NuGet.Common; using NuGet.Packaging; using NuGet.Packaging.Core; using NuGet.ProjectManagement; using NuGet.Protocol.Core.Types; namespace NuGet.PackageManagement { public interface IPackageRestoreManager { /// <summary> /// Occurs when it is detected that the packages are missing or restored for the current solution. /// </summary> event EventHandler<PackagesMissingStatusEventArgs> PackagesMissingStatusChanged; /// <summary> /// Occurs when it is detected that the assets file is missing. /// </summary> event AssetsFileMissingStatusChanged AssetsFileMissingStatusChanged; /// <summary> /// PackageRestoredEvent which is raised after a package is restored. /// </summary> event EventHandler<PackageRestoredEventArgs> PackageRestoredEvent; /// <summary> /// PackageRestoredEvent which is raised if a package restore failed. /// </summary> event EventHandler<PackageRestoreFailedEventArgs> PackageRestoreFailedEvent; /// <summary> /// Get the packages in the solution given the <paramref name="solutionDirectory"></paramref>. /// </summary> /// <returns> /// Returns a list of package references and the corresponding project names on which /// each package is installed, alongwith a bool which determines if the package is missing /// </returns> Task<IEnumerable<PackageRestoreData>> GetPackagesInSolutionAsync(string solutionDirectory, CancellationToken token); /// <summary> /// Get packages restore data for given package references. /// </summary> /// <param name="solutionDirectory">Current solution directory</param> /// <param name="packageReferencesDict">Dictionary of package reference with project names</param> /// <returns>List of packages restore data with missing package details.</returns> #pragma warning disable IDE0055 IEnumerable<PackageRestoreData> GetPackagesRestoreData(string solutionDirectory, Dictionary<PackageReference, List<string>> packageReferencesDict); #pragma warning restore IDE0055 /// <summary> /// Checks the current solution if there is any package missing. /// </summary> Task RaisePackagesMissingEventForSolutionAsync(string solutionDirectory, CancellationToken token); /// <summary> /// Checks if something is listening to the event of missing assets and change the status /// </summary> /// <param name="isAssetsFileMissing"></param> void RaiseAssetsFileMissingEventForProjectAsync(bool isAssetsFileMissing); /// <summary> /// Restores the missing packages for the current solution. /// </summary> /// <remarks> /// Best use case is the restore button that shows up in the UI or powershell when certain packages /// are missing /// </remarks> /// <returns>Returns true if atleast one package was restored.</returns> Task<PackageRestoreResult> RestoreMissingPackagesInSolutionAsync(string solutionDirectory, INuGetProjectContext nuGetProjectContext, ILogger logger, CancellationToken token); /// <summary> /// Restores the package references if they are missing /// </summary> /// <param name="packages"> /// This parameter is the list of package referneces mapped to the list of /// project names a package is installed on. This is most likely obtained by calling /// GetPackagesInSolutionAsync /// </param> /// <remarks> /// Best use case is when GetPackagesInSolutionAsync was already called, the result can be used /// in this method /// </remarks> /// <returns> /// Returns true if at least one package is restored. Raised package restored failed event with the /// list of project names. /// </returns> Task<PackageRestoreResult> RestoreMissingPackagesAsync(string solutionDirectory, IEnumerable<PackageRestoreData> packages, INuGetProjectContext nuGetProjectContext, PackageDownloadContext downloadContext, ILogger logger, CancellationToken token); } public delegate void AssetsFileMissingStatusChanged(object sender, bool isAssetsFileMissing); /// <summary> /// If 'Restored' is false, it means that the package was already restored /// If 'Restored' is true, the package was restored and successfully /// </summary> public class PackageRestoredEventArgs : EventArgs { public PackageIdentity Package { get; private set; } public bool Restored { get; private set; } public PackageRestoredEventArgs(PackageIdentity packageIdentity, bool restored) { if (packageIdentity == null) { throw new ArgumentNullException(nameof(packageIdentity)); } Package = packageIdentity; Restored = restored; } } public class PackagesMissingStatusEventArgs : EventArgs { public bool PackagesMissing { get; private set; } public PackagesMissingStatusEventArgs(bool packagesMissing) { PackagesMissing = packagesMissing; } } }