LocalPackageRepository returns IsLatestVersion=true for all packages

384 views Asked by At

I've created a folder on my C:\packages. Inside I've created two packages with identical Ids but have different versions. I the use Nuget.Core to create a LocalPackageRepository pointing to this directory.

When I query for the packages using respository.FindPackages("myId")both packages are correctly returned by the service. However, the IsLatestVersion is true for both packages, even though their versions are clearly different.

Things I've tried: I know these packages dicovered as OptimizedZipPackages looking through the source here, I cant find anything relevant to suggest an issue with the implementation.

I added the local repository to my Visual Studio NuGet feed manager. When I query that service, the latest version is shown.

Something seems to be wrong with how I've either created the packages, instantiated the repository, or its a bug in the library.

Using NuGet Core v2.8.60318.667

1

There are 1 answers

4
Matt Ward On BEST ANSWER

Looking at the source code the LocalPackage always returns true for IsLatestVersion if the NuGet package is not a pre-release.

In Visual Studio what happens is that the list of packages is further filtered by removing all but the latest version in the list so you only ever see the latest version. One way to do this is to use extension methods included in NuGet:

packages.DistinctLast<IPackage>(PackageEqualityComparer.Id);

The DistinctLast method assumes that the same NuGet package id will appear together in the list otherwise it will not filter them correctly.

I believe you could also use the AsCollapsed extension method which is similar to the above. It basically does:

packages.DistinctLast<IPackage>(PackageEqualityComparer.Id, PackageEqualityComparer.Version);