/// <summary> /// Gets the package .nupkg file path if it exists; otherwise, <c>null</c>. /// </summary> /// <param name="packageIdentity">A package identity.</param> /// <returns>The package .nupkg file path if it exists; otherwise, <c>null</c>.</returns> /// <exception cref="ArgumentNullException">Thrown if <paramref name="packageIdentity" /> /// is <c>null</c>.</exception> public string GetInstalledPackageFilePath(PackageIdentity packageIdentity) { if (packageIdentity == null) { throw new ArgumentNullException(nameof(packageIdentity)); } // Check the expected location before searching all directories var packageDirectory = PackagePathResolver.GetInstallPath(packageIdentity); var packageName = PackagePathResolver.GetPackageFileName(packageIdentity); var installPath = Path.GetFullPath(Path.Combine(packageDirectory, packageName)); // Keep the previous optimization of just going by the existance of the file if we find it. if (File.Exists(installPath)) { return(installPath); } // If the file was not found check for non-normalized paths and verify the id/version LocalPackageInfo package = null; if (PackagePathResolver.UseSideBySidePaths) { // Search for a folder with the id and version package = LocalFolderUtility.GetPackagesConfigFolderPackage( Root, packageIdentity, NullLogger.Instance); } else { // Search for just the id package = LocalFolderUtility.GetPackageV2( Root, packageIdentity, NullLogger.Instance, CancellationToken.None); } if (package != null && packageIdentity.Equals(package.Identity)) { return(package.Path); } // Default to empty return(string.Empty); }