Skip to content

[Umbrella] ValueTuple library work #13177

@jcouv

Description

@jcouv

Documentation of the various slices in the ValueTuple package:

Targeting pack Contents
netcoreapp1.1 Ref and lib assemblies type-forwards to System.Runtime ref assembly, which type-forwards to System.Private.Corelib (from CoreCLR or CoreRT).
netstandard1.0 and up Assembly implements ValueTuple and depends on System.Runtime
netstandard2.0 and up Relies on netstandard package (requires binding redirect)
PCL Assembly implements ValueTuple, but depends on mscorlib. Note that the precedence rules on targets means that PCL is picked when targeting desktop 4.5.
desktop 4.7 type-forwards ValueTuple to mscorlib

Known issues

ValueTuple nupkg and net47

Most prominent issue is when targeting desktop 4.6 (or lower) and referencing the ValueTuple package, then running on machine with desktop 4.7 installed.
The symptom are that tuples don't work in EE, interactive and possibly ASP.NET.
Workaround options: (1) target 4.7, or (2) remove ValueTuple dependency, or (3) run without 4.7 installed.
See https://github.com/dotnet/corefx/issues/16195 for more details.

ValueTuple in netstandard and net47

ValueTuple in netstandard and net471

Applications targeting .NET 4.6.1 that use .NET Standard libraries might be broken when running on .NET 4.7.1

https://github.com/Microsoft/dotnet-framework-early-access/issues/9


Reported issues


Work items

Adding System.ValueTuple to various corlib implementations:

Add ITuple to System.Tuple and System.ValueTuple to those corlibs:

After that:

Make System.ValueTuple binary serializable (https://github.com/dotnet/corefx/issues/15229) (which will ship together with ITuple above):

Hash seed randomization:

  • desktop (could be considered)
  • coreFX (done with Guid)
  • coreCLR (done with Random)
  • coreRT (done with Random)

EqualityComparer optimization:

Various BCL improvements:

Downgrade warnings issue:
- [ ] Change dependencies of ValueTuple package to reference 1.0.0 baseline (issue, fix) (closed "by design", customer should upgrade their 1.0 projects to 1.1 to use ValueTuple).

EE bug with not loading mscorlib

Clash between ValueTuple.dll and mscorlib.dll from new desktop framework (in short, a workaround was added to EE and a facade assembly was added to mscorlib in desktop 4.7.1 that type unifies with ValueTuple assembly version 4.1.*):

Binding redirects required for EF tests (julielerman/EFCore2NightlyNet461#1, ErikEJ/EntityFramework.SqlServerCompact#463)

But auto-generated binding redirects break type unification (https://github.com/Microsoft/dotnet-framework-early-access/issues/9)

Various bugs/proposals:

Change behavior when comparing with null (https://github.com/dotnet/corefx/issues/18528) (we ended up cancelling to keep Tuple and ValueTuple APIs more stable)

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

Status

Done Umbrellas

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions