Skip to content

Latest commit

 

History

History
112 lines (79 loc) · 15.1 KB

PackageCompatibilities.md

File metadata and controls

112 lines (79 loc) · 15.1 KB

PackageCompatibilities

This table contains the framework compatibility information for packages, using several different algorithms. Package compatibility is a relatively deep subject with a lot of different approaches, caveats, and exceptions. This table can help illustrate the differences between several approaches.

Cardinality Exactly one per package on NuGet.org
Child tables
Parent tables
Column used for CSV partitioning Identity
Column used for Kusto partitioning Identity
Key fields Identity
Data file container name packagecompatibilities
Driver PackageCompatibilityToCsv
Record type PackageCompatibility

Table schema

Column name Data type Required Description
ScanId string No Unused, always empty
ScanTimestamp timestamp No Unused, always empty
LowerId string Yes Lowercase package ID. Good for joins
Identity string Yes Lowercase package ID and lowercase, normalized version. Good for joins
Id string Yes Original case package ID
Version string Yes Original case, normalized package version
CatalogCommitTimestamp timestamp Yes Latest catalog commit timestamp for the package
Created timestamp Yes, for non-Deleted When the package version was created
ResultType enum Yes Type of record (e.g. Available, Deleted)
HasError bool Yes Whether or not there was an error determining compatibility
DoesNotRoundTrip bool Yes Whether or not the frameworks found fail round trip when parsed
HasAny bool Yes Whether or not any of the compatibility lists have an any framework
HasUnsupported bool Yes Whether or not any of the compatibility lists have an unsupported framework
HasAgnostic bool Yes Whether or not the of the compatibility lists have an agnostic framework
BrokenFrameworks array of strings Yes, for Available unless HasError Framework strings found that don't roundtrip properly
NuspecReader array of strings Yes, for Available unless HasError Frameworks via NuspecReader.GetSupportedFrameworks
NU1202 array of strings Yes, for Available unless HasError Frameworks mentioned in the NU1202 error
NuGetGallery array of strings Yes, for Available unless HasError Frameworks via same logic a NuGet.org except any is included, with URL-encoded paths decoded
NuGetGalleryEscaped array of strings Yes, for Available unless HasError Frameworks via same logic a NuGetGallery except any is included, with URL-encoded left encoded
NuGetGallerySupported array of objects Yes, for Available unless HasError Expanded list of all supported frameworks, as shown on NuGet.org
NuGetGalleryBadges array of objects Yes, for Available unless HasError List of framework badges (minimum framework version for common frameworks), as shown on NuGet.org

If HasError is true, one or more of the framework columns may be empty. This may be for many reasons but the most common is that the package was packed in a non-standard way and has an invalid framework in one of the file paths.

Any of the arrays of strings may be empty. A null value indicates an error when generating the array or that the package is deleted.

Each target framework mentioned in this table is in the "short folder name" format, e.g. netstandard2.0. This format is succinct and well recognized due to it's usage in the actual package asset file paths.

ResultType schema

Enum value Description
Available The package is available and compatibility analysis was attempted
Deleted The package is deleted and no metadata is available

BrokenFrameworks schema

The BrokenFrameworks column contains frameworks that fail to round trip properly through NuGetFrameworks.Parse(...). This can lead to strange behavior in NuGet.

The BrokenFrameworks column may contain frameworks in the full framework format (e.g. {name},Version=v{version}) to fully illustrate the broken values or in the short folder name format.

NuspecReader schema

The NuspecReader column is an array of strings where each string is a NuGet target framework that the package is compatible with, as determined by NuGet/NuGet.Client NuspecReader.GetSupportedFrameworks.

This method has known problems such as not considering newer top level folders like buildTransitive.

NU1202 schema

The NU1202 column is an array of strings where each string is a NuGet target framework that the package is compatible with, as determined by NuGet/NuGet.Client CompatibilityChecker.GetPackageFrameworks. This method is used to generate the NU1202 message emitted when restoring an incompatible package.

NuGetGallery schema

The NuspecReader column is an array of strings where each string is a NuGet target framework that the package is compatible with, as determined by NuGet/NuGetGallery PackageService.GetSupportedFrameworks().

Note that the data stored in the NuGetGallery (nuget.org) database excludes any frameworks as well as retains the original framework texts for unsupported cases. This column includes the any frameworks and shows unsupported frameworks simply as unsupported instead of the weird, unsupported framework text. To see the original, unsupported framework text, look at the BrokenFrameworks column.

This solution is meant to provide a view of framework compatibility that considers several popular package types but does not expand all compatible frameworks. For example, a package only containing a netstandard1.0 DLL will show only netstandard1.0, not all of the frameworks that support netstandard1.0 implicitly.

NuGetGalleryEscaped schema

Same as the NuGetGallerySchema column except the logic was executed on file paths that were not URL decoded. The reason this column exists is because naive analysis of NuGet package ZIP paths may result in leaving URL-encoded paths as-is. This can lead to differences in how frameworks in file paths are parsed. NuGet/NuGet.Client PackageArchiveReader decodes file paths containing the % sign (source) so this column illustrates what analysis would look like if this decoding do NOT happen.

NuGetGallerySupported schema

The NuGetGallerySupported field is an array of objects. Each object has the following schema.

Property name Data type Required Description
ProductName string true The human readable product name of the target framework (e.g. .NET Framework)
Frameworks array of objects true The expanded list of project frameworks that support this package

Each Framework object has the following schema.

Property name Data type Required Description
Framework string true The framework string (e.g. netstandard1.1)
IsComputed bool true If false, an asset exists in the package with this Framework, otherwise it's computed to be compatible by framework compatibility rules

NuGetGalleryBadges schema

The NuGetGalleryBadges field is an array of objects. Each object has the following schema.

This array does not contain all frameworks. It just contains the most popular ones like .NET, .NET Core, .NET Standard, and .NET Framework.

Property name Data type Required Description
ProductName string true The human readable product name of the target framework (e.g. .NET Framework)
Minimum string true The minimum framework version for the product name that is supported by the package