| File: MinClientVersionUtility.cs | Web Access |
| Project: src\nuget-client\src\NuGet.Core\NuGet.Packaging\NuGet.Packaging.csproj (NuGet.Packaging) |
// 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. using System; using System.Globalization; using NuGet.Common; using NuGet.Packaging.Core; using NuGet.Versioning; namespace NuGet.Packaging { /// <summary> /// Helpers for dealing with the NuGet client version and package minClientVersions. /// </summary> public static class MinClientVersionUtility { private static NuGetVersion? _clientVersion; /// <summary> /// Check the package minClientVersion and throw if it is greater than the current client version. /// </summary> public static void VerifyMinClientVersion(NuspecCoreReaderBase nuspecReader) { if (nuspecReader == null) { throw new ArgumentNullException(nameof(nuspecReader)); } if (!IsMinClientVersionCompatible(nuspecReader)) { var packageIdentity = nuspecReader.GetIdentity(); var packageMinClientVersion = nuspecReader.GetMinClientVersion(); var clientVersion = GetNuGetClientVersion(); throw new MinClientVersionException( string.Format(CultureInfo.CurrentCulture, Strings.PackageMinVersionNotSatisfied, packageIdentity.Id + " " + packageIdentity.Version.ToNormalizedString(), packageMinClientVersion!.ToNormalizedString(), clientVersion.ToNormalizedString())); } } /// <summary> /// Verify minClientVersion. /// </summary> public static bool IsMinClientVersionCompatible(NuspecCoreReaderBase nuspecReader) { if (nuspecReader == null) { throw new ArgumentNullException(nameof(nuspecReader)); } // Read the minClientVersion from the nuspec, this may be null var packageMinClientVersion = nuspecReader.GetMinClientVersion(); return (packageMinClientVersion == null || IsMinClientVersionCompatible(packageMinClientVersion)); } /// <summary> /// Verify minClientVersion. /// </summary> public static bool IsMinClientVersionCompatible(NuGetVersion packageMinClientVersion) { if (packageMinClientVersion == null) { throw new ArgumentNullException(nameof(packageMinClientVersion)); } var clientVersion = GetNuGetClientVersion(); var result = (packageMinClientVersion <= clientVersion); return result; } /// <summary> /// Read the NuGet client version from the assembly info as a NuGetVersion. /// </summary> public static NuGetVersion GetNuGetClientVersion() { if (_clientVersion == null) { var versionString = ClientVersionUtility.GetNuGetAssemblyVersion(); NuGetVersion? clientVersion; if (!NuGetVersion.TryParse(versionString, out clientVersion)) { throw new InvalidOperationException(Strings.UnableToParseClientVersion); } // Remove pre-release info from the version and return a stable version. _clientVersion = new NuGetVersion( major: clientVersion.Major, minor: clientVersion.Minor, patch: clientVersion.Patch, revision: clientVersion.Revision); } return _clientVersion; } } }