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 for Preview 5 OOB

<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.

Simple case for RC

<PackageReference Include="NuGet.Versioning" Version="3.6.0" />

In RC milestone, MsBuild will enable all metadata to be specified as a attribute or child element

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 3.6. 3.6.0-beta

####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