| File: Projects\NuGetProject.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.Packaging; using NuGet.Packaging.Core; using NuGet.Protocol.Core.Types; namespace NuGet.ProjectManagement { public abstract class NuGetProject { protected NuGetProject() : this(optionalMetadata: null) { } protected NuGetProject(Dictionary<string, object> optionalMetadata) { InternalMetadata = optionalMetadata ?? new Dictionary<string, object>(); } protected Dictionary<string, object> InternalMetadata { get; } public IReadOnlyDictionary<string, object> Metadata => InternalMetadata; public INuGetProjectServices ProjectServices { get; protected set; } = DefaultProjectServices.Instance; public ProjectModel.ProjectStyle ProjectStyle { get; protected set; } = ProjectModel.ProjectStyle.Unknown; /// <summary> /// This installs a package into the NuGetProject using the <see cref="Stream"/> passed in /// <param name="downloadResourceResult"></param> /// should be seekable /// </summary> /// <returns> /// Returns false if the package was already present in the NuGetProject. On successful installation, /// returns true /// </returns> public abstract Task<bool> InstallPackageAsync( PackageIdentity packageIdentity, DownloadResourceResult downloadResourceResult, INuGetProjectContext nuGetProjectContext, CancellationToken token); /// <summary> /// This uninstalls the package from the NuGetProject, if found /// </summary> /// <returns>Returns false if the package was not found. On successful uninstallation, returns true</returns> public abstract Task<bool> UninstallPackageAsync(PackageIdentity packageIdentity, INuGetProjectContext nuGetProjectContext, CancellationToken token); /// <summary> /// GetInstalledPackages will be used by Dependency Resolver and more /// </summary> /// <returns></returns> public abstract Task<IEnumerable<PackageReference>> GetInstalledPackagesAsync(CancellationToken token); public virtual Task PreProcessAsync(INuGetProjectContext nuGetProjectContext, CancellationToken token) { // Do Nothing by default return Task.CompletedTask; } public virtual Task PostProcessAsync(INuGetProjectContext nuGetProjectContext, CancellationToken token) { // Do Nothing by default return Task.CompletedTask; } public T GetMetadata<T>(string key) { if (key == null) { throw new ArgumentNullException(nameof(key)); } var value = Metadata[key]; return (T)value; } public bool TryGetMetadata<T>(string key, out T value) { value = default(T); object oValue; if (Metadata.TryGetValue(key, out oValue)) { if (oValue == null) { return true; } if (oValue is T) { value = (T)oValue; return true; } } return false; } /// <summary> /// Get metadata value, or return null if it doesn't exist. /// </summary> /// <param name="key"></param> /// <returns></returns> public object GetMetadataOrNull(string key) { if (Metadata.TryGetValue(key, out var value)) { return value; } return null; } public Task SaveAsync(CancellationToken token) { return ProjectServices.ProjectSystem.SaveProjectAsync(token); } /// <summary> /// This static helper method returns the unique name on the project if present /// Otherwise, returns the name. If name is not present, it will throw /// </summary> /// <param name="nuGetProject"></param> /// <returns></returns> public static string GetUniqueNameOrName(NuGetProject nuGetProject) { if (nuGetProject == null) { throw new ArgumentNullException(nameof(nuGetProject)); } string nuGetProjectName; if (!nuGetProject.TryGetMetadata(NuGetProjectMetadataKeys.UniqueName, out nuGetProjectName)) { // Unique name is not set, simply return the name nuGetProjectName = nuGetProject.GetMetadata<string>(NuGetProjectMetadataKeys.Name); } return nuGetProjectName; } } }