File: Extensions\LockFileExtensions.cs
Web Access
Project: src\src\sdk\src\Cli\Microsoft.DotNet.Cli.Utils\Microsoft.DotNet.Cli.Utils.csproj (Microsoft.DotNet.Cli.Utils)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using NuGet.Packaging;
using NuGet.ProjectModel;

namespace Microsoft.DotNet.Cli.Utils.Extensions;

internal static class LockFileExtensions
{
    public static string GetPackageDirectory(this LockFile lockFile, LockFileTargetLibrary library)
    {
        var packageFolders = lockFile.GetNormalizedPackageFolders();

        var packageFoldersCount = packageFolders.Count();
        var userPackageFolder = packageFoldersCount == 1 ? string.Empty : packageFolders.First();
        var fallbackPackageFolders = packageFoldersCount > 1 ? packageFolders.Skip(1) : packageFolders;

        var packageDirectory = new FallbackPackagePathResolver(userPackageFolder, fallbackPackageFolders)
            .GetPackageDirectory(library.Name!, library.Version!)!;

        return packageDirectory;
    }

    public static IEnumerable<string> GetNormalizedPackageFolders(this LockFile lockFile)
    {
        return lockFile.PackageFolders.Select(p =>
            PathUtility.EnsureNoTrailingDirectorySeparator(p.Path));
    }
}