Skip to content

PackageReference Specification

Rob Relyea edited this page Sep 20, 2016 · 15 revisions

Problem

We need to migrate xproj/project.json data to msbuild based data structures in VS "15" for .NET Core.

Who is the customer?

.NET Core developers

Solution

Simple case

<PackageReference Include="NuGet.Versioning">
    <Version>3.6.0</Version>
</PackageReference>
<!-- this means the same as 3.6.0 in project.json today, which is >=3.6.0, preferring the lowest -->

FAQ about “/3.6.0” as part of the Include:

  1. [ESJ] One set of scenarios that might be interesting is giving targets the ability to examine/control the versioning of PackageReference items. That’s straightforward if Version is metadata, less so if it is part of a string. I agree though that brevity is a higher priority here. Perhaps you have a target that runs and produces an intermediate that converts these to Items + meta-data. [YG] Targets controlling the versions of packagerefs would become a chicken and egg thing eventually, and will get in the way of how the UI works. But we could still probably support it with a library that can decompose/recompose. Alternatively we can have a “brevity” format and an expanded format. I’m not in love with the latter suggestion because it adds more edge cases and confusion.

Conditioned on a TFM

<PackageReference Include="NuGet.Versioning" Condition = "'$(TargetFramework)' == 'netstandard10'> <Version>3.6.0</Version> </PackageReference>

Versioning Flexibility

Floating Version

            Issues with “*” inside of an Include:

a) Msbuild currently will treat this “” as a wildcard. We are seeing if there is a way for msbuild to support this syntax (perhaps https://github.com/Microsoft/msbuild/issues/982), or perhaps a “Version” attribute. If neither of those are possible, we’ll likely have to go with: 3.6.

We’d like to start enabling double asterisks

Explicit Floating Version Ranges

Hard Version

Strict Mode strict|normal|permissive • Strict will convert “3.6.0” to “[3.6.0]” (on top level and dependencies – across the entire restore graph) • Normal will warn on upgrades • Permissive will not warn Current default is permissive. New default will be normal.

Asset Inclusion Include/Exclude/Private Assets

Contributing

What's Being Worked On?

Check out the proposals in the accepted & proposed folders on the repository, and active PRs for proposals being discussed today.

Common Problems

Clone this wiki locally