New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Ready for Review] Slightly improve performance #2299

Merged
merged 7 commits into from May 2, 2017

Conversation

Projects
None yet
4 participants
@0x53A
Contributor

0x53A commented Apr 28, 2017

Let's see what the CI says.

ref #2289

Show outdated Hide outdated src/Directory.Build.props
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SourceLink.Create.CommandLine" Version="2.1.0" PrivateAssets="all" />
<!--<PackageReference Include="SourceLink.Create.CommandLine" Version="2.1.0" PrivateAssets="all" />-->

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

Why are these commented now?

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

Why are these commented now?

This comment has been minimized.

@0x53A

0x53A Apr 28, 2017

Contributor
@0x53A

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

cool 👍

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

cool 👍

This comment has been minimized.

@0x53A

0x53A Apr 28, 2017

Contributor

I will revert it after finishing this pr and before it get's merged, that was just so I could debug it locally.
Someone else should take care of this, either fix it or just roll https://github.com/fsprojects/Paket/pull/2200/files back.

@0x53A

0x53A Apr 28, 2017

Contributor

I will revert it after finishing this pr and before it get's merged, that was just so I could debug it locally.
Someone else should take care of this, either fix it or just roll https://github.com/fsprojects/Paket/pull/2200/files back.

This comment has been minimized.

@0x53A

0x53A Apr 28, 2017

Contributor

@cloudRoutine does debugging work for you?

@0x53A

0x53A Apr 28, 2017

Contributor

@cloudRoutine does debugging work for you?

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

Debugging does work for me, although I never found debugging particularly useful for working on this function. Way too many iterations to go through, but maybe I should have tried conditional breakpoints.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

Debugging does work for me, although I never found debugging particularly useful for working on this function. Way too many iterations to go through, but maybe I should have tried conditional breakpoints.

Show outdated Hide outdated src/Directory.Build.targets
@@ -10,5 +10,5 @@
<CreateProperty Value="@(EmbeddedFiles)">
<Output TaskParameter="Value" PropertyName="embed" />
</CreateProperty>
</Target>
</Target>-->

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

Why is this commented now?

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

Why is this commented now?

This comment has been minimized.

@0x53A

0x53A Apr 28, 2017

Contributor
@0x53A
Show outdated Hide outdated src/Paket.Core/Dependencies/PackageResolver.fs
knownConflicts
|> Seq.map (fun (conflicts,selectedVersion) ->
match selectedVersion with
| None when Set.isSubset conflicts allRequirements -> conflicts
| None when conflicts.IsSubsetOf( allRequirements ) -> conflicts

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

doesn't need parens

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

doesn't need parens

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A Apr 28, 2017

Contributor

@cloudRoutine Thanks for taking a look, but that is a really early version. =)

Stylistically, I need to clean it up and revert a bunch.

The relevant change to review is fuseConflicts and especially the condition leading to
https://github.com/fsprojects/Paket/pull/2299/files#diff-67971315cd3928195536b7ac5f0428fbR666

Contributor

0x53A commented Apr 28, 2017

@cloudRoutine Thanks for taking a look, but that is a really early version. =)

Stylistically, I need to clean it up and revert a bunch.

The relevant change to review is fuseConflicts and especially the condition leading to
https://github.com/fsprojects/Paket/pull/2299/files#diff-67971315cd3928195536b7ac5f0428fbR666

@cloudRoutine

This comment has been minimized.

Show comment
Hide comment
@cloudRoutine

cloudRoutine Apr 28, 2017

Member

very confident, working on this one is annoying isn't it? 😆

1) Error : Paket.DependencyGraphSpecs.should solve strange graph
System.Exception : There was a version conflict during package resolution.
  Resolved packages:
   - P3 1.1.3
   - P7 11.10.10.3
  Could not resolve package P8 <= 0.2.8:
   - No versions available.
  Please try to relax some conditions or resolve the conflict manually 
...
2) Error : Paket.UpdateProcess.Test.SelectiveUpdate considers package name case difference
System.Exception : There was a version conflict during package resolution.
  Resolved packages:
   - Castle.Core-log4net 4.0.0
  Could not resolve package castle.core 3.2:
   - Castle.Core-log4net 4.0.0 requested package castle.core: >= 4.0
  Please try to relax some conditions or resolve the conflict manually 
...
3) Error : Paket.UpdateProcess.Test.SelectiveUpdate does not update when a dependency constrain is not met
System.Exception : There was a version conflict during package resolution.
  Resolved packages:
   - Castle.Core-log4net 4.0.0
  Could not resolve package Castle.Core 3.2:
   - Castle.Core-log4net 4.0.0 requested package Castle.Core: >= 4.0
  Please try to relax some conditions or resolve the conflict manually 
 ...

it looks like it's cutting out too quickly now

Member

cloudRoutine commented Apr 28, 2017

very confident, working on this one is annoying isn't it? 😆

1) Error : Paket.DependencyGraphSpecs.should solve strange graph
System.Exception : There was a version conflict during package resolution.
  Resolved packages:
   - P3 1.1.3
   - P7 11.10.10.3
  Could not resolve package P8 <= 0.2.8:
   - No versions available.
  Please try to relax some conditions or resolve the conflict manually 
...
2) Error : Paket.UpdateProcess.Test.SelectiveUpdate considers package name case difference
System.Exception : There was a version conflict during package resolution.
  Resolved packages:
   - Castle.Core-log4net 4.0.0
  Could not resolve package castle.core 3.2:
   - Castle.Core-log4net 4.0.0 requested package castle.core: >= 4.0
  Please try to relax some conditions or resolve the conflict manually 
...
3) Error : Paket.UpdateProcess.Test.SelectiveUpdate does not update when a dependency constrain is not met
System.Exception : There was a version conflict during package resolution.
  Resolved packages:
   - Castle.Core-log4net 4.0.0
  Could not resolve package Castle.Core 3.2:
   - Castle.Core-log4net 4.0.0 requested package Castle.Core: >= 4.0
  Please try to relax some conditions or resolve the conflict manually 
 ...

it looks like it's cutting out too quickly now

Show outdated Hide outdated src/Paket.Core/Dependencies/PackageResolver.fs
@@ -681,7 +717,7 @@ let Resolve (getVersionsF, getPackageDetailsF, groupName:GroupName, globalStrate
let flags =
StepFlags(flags.Ready,flags.UseUnlisted,flags.HasUnlisted,true,flags.FirstTrial,flags.UnlistedSearch)

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

Now that we're on F# 4.1 StepFlags should be changed to a struct record

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

Now that we're on F# 4.1 StepFlags should be changed to a struct record

@cloudRoutine

This comment has been minimized.

Show comment
Hide comment
@cloudRoutine

cloudRoutine Apr 28, 2017

Member

@0x53A you're checking the IL to make sure it stays tailrec right? (just making sure)

Member

cloudRoutine commented Apr 28, 2017

@0x53A you're checking the IL to make sure it stays tailrec right? (just making sure)

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A Apr 28, 2017

Contributor

@cloudRoutine If it weren't, it would stackoverflow =)

I have "solved" the failing UTs by falling back to the old behaviour (go back one) if it can't find a matching step to fall back to, but that probably just masks an issue within findMatchingStep.

Contributor

0x53A commented Apr 28, 2017

@cloudRoutine If it weren't, it would stackoverflow =)

I have "solved" the failing UTs by falling back to the old behaviour (go back one) if it can't find a matching step to fall back to, but that probably just masks an issue within findMatchingStep.

@cloudRoutine

This comment has been minimized.

Show comment
Hide comment
@cloudRoutine

cloudRoutine Apr 28, 2017

Member

Were you encountering stack overflows on the unit tests when it wasn't tailrec? I'm not sure that any of them pull in enough dependencies to cause it, and I can't remember if I added one to make sure 😄

Member

cloudRoutine commented Apr 28, 2017

Were you encountering stack overflows on the unit tests when it wasn't tailrec? I'm not sure that any of them pull in enough dependencies to cause it, and I can't remember if I added one to make sure 😄

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A Apr 28, 2017

Contributor

Not on the unit tests, but on the dependencies file from the original issue.

You can see my let x = ...; x dance in 2fa007c, that was to disable tailrec, so that I could properly debug it.

Contributor

0x53A commented Apr 28, 2017

Not on the unit tests, but on the dependencies file from the original issue.

You can see my let x = ...; x dance in 2fa007c, that was to disable tailrec, so that I could properly debug it.

Show outdated Hide outdated src/Paket/Paket.fsproj
@@ -35,9 +36,13 @@
<StartArguments>install</StartArguments>
<StartWorkingDirectory>C:\dev\src\Paket\integrationtests\scenarios\loading-scripts\dependencies-file-flag\temp</StartWorkingDirectory>
<StartArguments>install</StartArguments>
<StartWorkingDirectory>C:\Users\lr\Source\Repos\castos</StartWorkingDirectory>
<StartWorkingDirectory>C:\Users\lr\Source\Repos\paket-perf-repro</StartWorkingDirectory>

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

don't forget to cut these out

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

don't forget to cut these out

@cloudRoutine

This comment has been minimized.

Show comment
Hide comment
@cloudRoutine

cloudRoutine Apr 28, 2017

Member

Can you add that dependencies file as a test case?

Member

cloudRoutine commented Apr 28, 2017

Can you add that dependencies file as a test case?

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A Apr 28, 2017

Contributor

Soo ci is green again. Will do the rest on the evening.

Contributor

0x53A commented Apr 28, 2017

Soo ci is green again. Will do the rest on the evening.

@cloudRoutine

This comment has been minimized.

Show comment
Hide comment
@cloudRoutine

cloudRoutine Apr 28, 2017

Member

Great work on this 💪

Member

cloudRoutine commented Apr 28, 2017

Great work on this 💪

(not x.VersionRequirement.Range.IsGlobalOverride,x.Depth)
(not y.VersionRequirement.Range.IsGlobalOverride,y.Depth)
yield match startWithPackage with
if obj.ReferenceEquals(x, y) then 0 else

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

why was obj.ReferenceEquals necessary instead of =? just curious

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

why was obj.ReferenceEquals necessary instead of =? just curious

This comment has been minimized.

@0x53A

0x53A Apr 28, 2017

Contributor

Not necessary, but performance improvement.
It first compared the whole objects, then compared each member again.

Profiler showed a small improvement.

@0x53A

0x53A Apr 28, 2017

Contributor

Not necessary, but performance improvement.
It first compared the whole objects, then compared each member again.

Profiler showed a small improvement.

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

I thought = made use of custom equality, or is the obj.ReferenceEquals faster than that?

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

I thought = made use of custom equality, or is the obj.ReferenceEquals faster than that?

This comment has been minimized.

@0x53A

0x53A Apr 28, 2017

Contributor

yes and yes.

ref-equals is just a single pointer comparison, the custom equality is one (potentially de-virtualized) virtual call, one type-test (https://github.com/0x53A/Paket/blob/932400899c3927c823cc9b869de545de71c650f2/src/Paket.Core/Versioning/Requirements.fs#L771) and up to 6 member comparisons. And if any of these members are non-equal, then they are just compared again in Compare itself.

Afaik profiling showed a single-digit-% performance improvement, but I want to rerun these tests anyway.

@0x53A

0x53A Apr 28, 2017

Contributor

yes and yes.

ref-equals is just a single pointer comparison, the custom equality is one (potentially de-virtualized) virtual call, one type-test (https://github.com/0x53A/Paket/blob/932400899c3927c823cc9b869de545de71c650f2/src/Paket.Core/Versioning/Requirements.fs#L771) and up to 6 member comparisons. And if any of these members are non-equal, then they are just compared again in Compare itself.

Afaik profiling showed a single-digit-% performance improvement, but I want to rerun these tests anyway.

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A Apr 28, 2017

Contributor

I think another quick win may be ordering the Requirements so that fixed versions are resolved first.

E.g. I was testing #2294 (comment) and noticed the following warning:

 Could not resolve package NETStandard.Library 1.6:
   - Amazon.Lambda.APIGatewayEvents 1.1.0 requested package NETStandard.Library: >= 1.6
   - Amazon.Lambda.AspNetCoreServer 0.8.1-preview1 requested package NETStandard.Library: >= 1.6
   - FluentAssertions 4.19.2 requested package NETStandard.Library: >= 1.6
   - Microsoft.AspNetCore.Mvc.Core 1.1.2 requested package NETStandard.Library: >= 1.6.1
   - Microsoft.Extensions.Configuration.Json 1.1.0 requested package NETStandard.Library: >= 1.6.1
   - xunit.extensibility.execution 2.3.0-beta1-build3642 requested package NETStandard.Library: >= 1.6

But logically speaking, that warning is backwards.
NETStandard.Library is pinned and doesn't need resolving, the other packages need to be resolved for it.

At the moment it seems to resolve it in the order it is specified in paket.dependencies:

Contributor

0x53A commented Apr 28, 2017

I think another quick win may be ordering the Requirements so that fixed versions are resolved first.

E.g. I was testing #2294 (comment) and noticed the following warning:

 Could not resolve package NETStandard.Library 1.6:
   - Amazon.Lambda.APIGatewayEvents 1.1.0 requested package NETStandard.Library: >= 1.6
   - Amazon.Lambda.AspNetCoreServer 0.8.1-preview1 requested package NETStandard.Library: >= 1.6
   - FluentAssertions 4.19.2 requested package NETStandard.Library: >= 1.6
   - Microsoft.AspNetCore.Mvc.Core 1.1.2 requested package NETStandard.Library: >= 1.6.1
   - Microsoft.Extensions.Configuration.Json 1.1.0 requested package NETStandard.Library: >= 1.6.1
   - xunit.extensibility.execution 2.3.0-beta1-build3642 requested package NETStandard.Library: >= 1.6

But logically speaking, that warning is backwards.
NETStandard.Library is pinned and doesn't need resolving, the other packages need to be resolved for it.

At the moment it seems to resolve it in the order it is specified in paket.dependencies:

@forki

This comment has been minimized.

Show comment
Hide comment
@forki

forki Apr 28, 2017

Member

ordering is very important. In general the heuristic was to resolve things with high conflict potential first. then fixed versions.

Member

forki commented Apr 28, 2017

ordering is very important. In general the heuristic was to resolve things with high conflict potential first. then fixed versions.

@forki

This comment has been minimized.

Show comment
Hide comment
@forki

forki Apr 28, 2017

Member

can we please get a mergeable PR before you start new work? Just to get this into the bank.

Member

forki commented Apr 28, 2017

can we please get a mergeable PR before you start new work? Just to get this into the bank.

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A Apr 28, 2017

Contributor

I'm not really happy with how the current check works - it just compares the name of the conflicting requirements to the names of the previously solved requirements and if it can't find one it just re-solves the previous one (which is what it did before). So there may (and surely are) still degenerate dependency files which will take forever to solve.

The correct way would be to walk the whole dependency chain and check if any conditions actually conflicts.

My plan (for this evening) was to split this in two PRs:

  • basic performance improvements (like the Comparison method)
  • the change to the Resolver

Now I don't think the resolver change is bad - the unit tests pass, so it shouldn't actually make it worse - but it is far from perfect, so it may be worth it to pull now anyway and improve it later.

If you want to merge it NOW, feel free to cherry-pick and clean up the changes to PackageResolver.fs

( I can't push from behind the work-firewall ...)

Contributor

0x53A commented Apr 28, 2017

I'm not really happy with how the current check works - it just compares the name of the conflicting requirements to the names of the previously solved requirements and if it can't find one it just re-solves the previous one (which is what it did before). So there may (and surely are) still degenerate dependency files which will take forever to solve.

The correct way would be to walk the whole dependency chain and check if any conditions actually conflicts.

My plan (for this evening) was to split this in two PRs:

  • basic performance improvements (like the Comparison method)
  • the change to the Resolver

Now I don't think the resolver change is bad - the unit tests pass, so it shouldn't actually make it worse - but it is far from perfect, so it may be worth it to pull now anyway and improve it later.

If you want to merge it NOW, feel free to cherry-pick and clean up the changes to PackageResolver.fs

( I can't push from behind the work-firewall ...)

@cloudRoutine

This comment has been minimized.

Show comment
Hide comment
@cloudRoutine

cloudRoutine Apr 28, 2017

Member

I'll clean this up and get it merge ready

Member

cloudRoutine commented Apr 28, 2017

I'll clean this up and get it merge ready

Show outdated Hide outdated src/Paket.Core/Dependencies/PackageResolver.fs
@@ -681,7 +726,7 @@ let Resolve (getVersionsF, getPackageDetailsF, groupName:GroupName, globalStrate
let flags =
StepFlags(flags.Ready,flags.UseUnlisted,flags.HasUnlisted,true,flags.FirstTrial,flags.UnlistedSearch)
step (Inner((continueConflict,lastStep,lastRequirement),priorConflictSteps)) stackpack lastCompatibleVersions lastFlags
step (Inner((continueConflict,lastStep,lastRequirement),priorConflictSteps)) stackpack lastCompatibleVersions flags

This comment has been minimized.

@0x53A

0x53A Apr 28, 2017

Contributor

this was left-over from one of my experiments, I didn't mean to commit it. flags is created above, but never used, so it looked suspicious.

What do you think @cloudRoutine?

Unit tests are green WITH this change, I plan to revert it and rerun the unit tests ...

@0x53A

0x53A Apr 28, 2017

Contributor

this was left-over from one of my experiments, I didn't mean to commit it. flags is created above, but never used, so it looked suspicious.

What do you think @cloudRoutine?

Unit tests are green WITH this change, I plan to revert it and rerun the unit tests ...

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

yea I was wondering about this, it's been a few months so I'm not totally sure what it should have been, but I think I may have meant to write

let flags =StepFlags(lastFlags.Ready,lastFlags.UseUnlisted,lastFlags.HasUnlisted,true,lastFlags.FirstTrial,lastFlags.UnlistedSearch)
                        
step (Inner((continueConflict,lastStep,lastRequirement),priorConflictSteps)) stackpack lastCompatibleVersions  flags 
@cloudRoutine

cloudRoutine Apr 28, 2017

Member

yea I was wondering about this, it's been a few months so I'm not totally sure what it should have been, but I think I may have meant to write

let flags =StepFlags(lastFlags.Ready,lastFlags.UseUnlisted,lastFlags.HasUnlisted,true,lastFlags.FirstTrial,lastFlags.UnlistedSearch)
                        
step (Inner((continueConflict,lastStep,lastRequirement),priorConflictSteps)) stackpack lastCompatibleVersions  flags 

This comment has been minimized.

@0x53A

0x53A Apr 28, 2017

Contributor

Since the unit tests seem to be green either way - how would this affect execution?
Can you imagine any case where this would make a difference?

@0x53A

0x53A Apr 28, 2017

Contributor

Since the unit tests seem to be green either way - how would this affect execution?
Can you imagine any case where this would make a difference?

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

the unit tests aren't are reliable check on restore's functionality, the full integration test suite is needed to put it through it's paces

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

the unit tests aren't are reliable check on restore's functionality, the full integration test suite is needed to put it through it's paces

This comment has been minimized.

@0x53A

0x53A Apr 28, 2017

Contributor

Yes, but the serverbuild was green before this PR, and it is now green with this PR, so unless this is also affected by the change to fuseConflicts it looks like it doesn't matter.

Or are the integration tests not run on PRs?

@0x53A

0x53A Apr 28, 2017

Contributor

Yes, but the serverbuild was green before this PR, and it is now green with this PR, so unless this is also affected by the change to fuseConflicts it looks like it doesn't matter.

Or are the integration tests not run on PRs?

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

now that I actually have the code in front of me in VS, that's the force break flag, so that should just bail us out of resolution faster and it probably shouldn't make much of a difference what the other flags are (don't quote me on that ;P)

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

now that I actually have the code in front of me in VS, that's the force break flag, so that should just bail us out of resolution faster and it probably shouldn't make much of a difference what the other flags are (don't quote me on that ;P)

Show outdated Hide outdated src/Paket.Core/Dependencies/PackageResolver.fs
step (Inner((continueConflict,lastStep,lastRequirement),priorConflictSteps)) stackpack lastCompatibleVersions lastFlags
| None ->
// could not find a specific package - go back one
let (lastConflict,lastStep,lastRequirement,lastCompatibleVersions,lastFlags) :: priorConflictSteps = priorConflictSteps

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

Is this supposed to pull the head off of priorConflictSteps as (lastConflict,lastStep,lastRequirement,lastCompatibleVersions,lastFlags) and then alias it's tail as priorConflictSteps ?

@cloudRoutine

cloudRoutine Apr 28, 2017

Member

Is this supposed to pull the head off of priorConflictSteps as (lastConflict,lastStep,lastRequirement,lastCompatibleVersions,lastFlags) and then alias it's tail as priorConflictSteps ?

This comment has been minimized.

@0x53A

0x53A Apr 28, 2017

Contributor

exactly, this uses the previous behaviour as a fallback if it can't find a specific one

@0x53A

0x53A Apr 28, 2017

Contributor

exactly, this uses the previous behaviour as a fallback if it can't find a specific one

This comment has been minimized.

@0x53A

0x53A Apr 28, 2017

Contributor

This was required to fix the three failing tests

@0x53A

0x53A Apr 28, 2017

Contributor

This was required to fix the three failing tests

@cloudRoutine

This comment has been minimized.

Show comment
Hide comment
@cloudRoutine

cloudRoutine Apr 28, 2017

Member

@0x53A yea you should probably make a new PR and just cherry pick what you need onto it, all the commits between your initial ones and now made rebasing a big pain.

Member

cloudRoutine commented Apr 28, 2017

@0x53A yea you should probably make a new PR and just cherry pick what you need onto it, all the commits between your initial ones and now made rebasing a big pain.

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A Apr 28, 2017

Contributor

If you don't mind I would just squash it all into one
(backup of the old branch is at https://github.com/0x53A/Paket/tree/old-perf)

Contributor

0x53A commented Apr 28, 2017

If you don't mind I would just squash it all into one
(backup of the old branch is at https://github.com/0x53A/Paket/tree/old-perf)

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A Apr 28, 2017

Contributor

It's not safe to compare tuples by reference (see Microsoft/visualfsharp#2923), so I have modified findMatchingStep slightly. It now gets the index first.

Do you know of a nicer way to remove a single index from a list?

Contributor

0x53A commented Apr 28, 2017

It's not safe to compare tuples by reference (see Microsoft/visualfsharp#2923), so I have modified findMatchingStep slightly. It now gets the index first.

Do you know of a nicer way to remove a single index from a list?

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A Apr 30, 2017

Contributor

I did a quick benchmark, and it looks like foldback has a relatively high overhead: https://gist.github.com/0x53A/d6d30523e04c7e1c448668546c6d69f9
(Edit: benchmarking is hard, after fixing an issue with the benchmark, it looks like foldback is actually faster =) )

Contributor

0x53A commented Apr 30, 2017

I did a quick benchmark, and it looks like foldback has a relatively high overhead: https://gist.github.com/0x53A/d6d30523e04c7e1c448668546c6d69f9
(Edit: benchmarking is hard, after fixing an issue with the benchmark, it looks like foldback is actually faster =) )

@forki

This comment has been minimized.

Show comment
Hide comment
@forki

forki Apr 30, 2017

Member

Do we have any numbers in how perf improves?

Member

forki commented Apr 30, 2017

Do we have any numbers in how perf improves?

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A Apr 30, 2017

Contributor

The Resolving is only cpu bound if the algorithm degrades. That means the really relevant part was the change to fuseConflicts, the other performance optimizations would be unnecessary if the algorithm was perfect.

Currently it still degrades in a few situations, but it is already better than before.

Especially the last two commits are completely unnecessary performance-wise, my main motivation was readability and extracting it to a helper function, the benchmark was just curiosity.


For performance testing, it would be great if you had any other dependencies files which did correctly solve before (so that we can actually compare numbers), and took maybe a minute or two, so that we don't need to wait too long.

For the next round of improvements I want to set up a benchmark script that checks out a git sha, builds it, and runs a few paket installs against a few different paket.dependencies.


Before: https://github.com/fsprojects/Paket/releases/tag/5.0.0-alpha007
Now: commit f5deb48


  1. from #2289
#2289

redirects: on
framework: net46

source https://api.nuget.org/v3/index.json

nuget Akka.Persistence.SqlServer
nuget SQLProvider
nuget Microsoft.FSharpLu.Json
nuget Microsoft.Net.Http
nuget Microsoft.AspNet.WebApi.Client
nuget FSharp.Core redirects: force
nuget FSharp.Configuration
nuget FSharp.Formatting
nuget FSharp.Data
nuget FSharp.Data.TypeProviders
nuget Newtonsoft.Json
nuget FAKE
nuget SourceLink.Fake
nuget Akka
nuget Akka.FSharp
nuget Akka.Persistence
nuget Akka.Persistence.FSharp
nuget Akka.Persistence.Sql.Common
nuget Akka.Persistence.Query
nuget Akka.Persistence.Query.Sql
nuget Akka.Logger.Serilog
nuget Akka.Monitoring
nuget Akka.Monitoring.StatsD
nuget Akka.TestKit.NUnit
nuget Akka.TestKit.Xunit2
nuget Akka.Serialization.Wire
nuget FsPickler
nuget Serilog
nuget Serilog.Sinks.ElasticSearch
nuget Nest ~> 5
nuget RabbitMQ.Client
nuget SSH.NET
nuget Topshelf
nuget Topshelf.Serilog
nuget NUnit ~> 2
nuget NUnit.Runners
nuget NUnitTestAdapter
nuget TickSpec.NUnit content: none
nuget FsCheck
nuget FsCheck.Nunit
nuget System.Collections.Immutable
nuget Suave
nuget OctopusTools
nuget Suave.Swagger
nuget Quartz
nuget Akka.Quartz.Actor
nuget Oracle.ManagedDataAccess

Before: didn't finish after an hour
Now: 44 seconds - ready.


  1. from #2294 (comment)

The original paket.dependencies from the issue fails with an error, but this reduced one resolves correctly. (see #2305 for the failure)

source https://www.nuget.org/api/v2/

nuget NETStandard.Library <= 1.6.0
nuget Microsoft.AspNetCore.Mvc.Core

Now: 5 minutes, 1 second - ready.
Before: 1 hour, 8 minutes, 21 seconds - ready.

paket.log.txt

created lockfile

NUGET
remote: https://www.nuget.org/api/v2

Microsoft.AspNetCore.Authorization (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.Logging.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Options (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.Security.Claims (>= 4.0.1) - framework: >= netstandard13
Microsoft.AspNetCore.Hosting.Abstractions (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Hosting.Server.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.AspNetCore.Http.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Configuration.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.DependencyInjection.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.FileProviders.Abstractions (>= 1.0.1) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Logging.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
Microsoft.AspNetCore.Hosting.Server.Abstractions (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http.Features (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Configuration.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
Microsoft.AspNetCore.Http (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.AspNetCore.WebUtilities (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.ObjectPool (>= 1.0.1) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Options (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Net.Http.Headers (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.Buffers (>= 4.0) - framework: >= net451, >= netstandard13
  System.Threading (>= 4.0.11) - framework: >= netstandard13
Microsoft.AspNetCore.Http.Abstractions (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http.Features (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.Globalization.Extensions (>= 4.0.1) - framework: >= netstandard13
  System.Linq.Expressions (>= 4.1.1) - framework: >= netstandard13
  System.Reflection.TypeExtensions (>= 4.1) - framework: >= netstandard13
  System.Runtime.InteropServices (>= 4.1) - framework: >= netstandard13
  System.Text.Encodings.Web (>= 4.0) - framework: >= net451, >= netstandard13
Microsoft.AspNetCore.Http.Extensions (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.FileProviders.Abstractions (>= 1.0.1) - framework: >= net451, >= netstandard13
  Microsoft.Net.Http.Headers (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.Buffers (>= 4.0) - framework: >= net451, >= netstandard13
  System.IO.FileSystem (>= 4.0.1) - framework: >= netstandard13
Microsoft.AspNetCore.Http.Features (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.Primitives (>= 1.0.1) - framework: >= net451, >= netstandard13
  System.Collections (>= 4.0.11) - framework: >= netstandard13
  System.ComponentModel (>= 4.0.1) - framework: >= netstandard13
  System.Linq (>= 4.1) - framework: >= netstandard13
  System.Net.Primitives (>= 4.0.11) - framework: >= netstandard13
  System.Net.WebSockets (>= 4.0) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.1) - framework: >= netstandard13
  System.Security.Claims (>= 4.0.1) - framework: >= netstandard13
  System.Security.Cryptography.X509Certificates (>= 4.1) - framework: >= netstandard13
  System.Security.Principal (>= 4.0.1) - framework: >= netstandard13
Microsoft.AspNetCore.Mvc.Abstractions (1.0.3) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Routing.Abstractions (>= 1.0.3) - framework: >= net451, >= netstandard13
  Microsoft.CSharp (>= 4.0.1) - framework: >= netstandard13
  Microsoft.Net.Http.Headers (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.ComponentModel.TypeConverter (>= 4.1) - framework: >= netstandard13
  System.Reflection.Extensions (>= 4.0.1) - framework: >= netstandard13
  System.Text.Encoding.Extensions (>= 4.0.11) - framework: >= netstandard13
Microsoft.AspNetCore.Mvc.Core (1.0.3)
  Microsoft.AspNetCore.Authorization (>= 1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Hosting.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http (>= 1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Mvc.Abstractions (>= 1.0.3) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Routing (>= 1.0.3) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.DependencyModel (>= 1.0) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.FileProviders.Abstractions (>= 1.0.1) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.Logging.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.PlatformAbstractions (>= 1.0) - framework: >= net451, >= netstandard16
  System.Buffers (>= 4.0) - framework: >= net451, >= netstandard16
  System.Diagnostics.DiagnosticSource (>= 4.0) - framework: >= net451, >= netstandard16
  System.Text.Encoding (>= 4.0.11) - framework: >= netstandard16
Microsoft.AspNetCore.Routing (1.0.3) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http.Extensions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.AspNetCore.Routing.Abstractions (>= 1.0.3) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Logging.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.ObjectPool (>= 1.0.1) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Options (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.Collections (>= 4.0.11) - framework: >= netstandard13
  System.Text.RegularExpressions (>= 4.1) - framework: >= netstandard13
Microsoft.AspNetCore.Routing.Abstractions (1.0.3) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.Collections.Concurrent (>= 4.0.12) - framework: >= netstandard13
  System.Reflection.Extensions (>= 4.0.1) - framework: >= netstandard13
  System.Threading.Tasks (>= 4.0.11) - framework: >= netstandard13
Microsoft.AspNetCore.WebUtilities (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.Primitives (>= 1.0.1) - framework: >= net451, >= netstandard13
  System.Buffers (>= 4.0) - framework: >= net451, >= netstandard13
  System.Collections (>= 4.0.11) - framework: >= netstandard13
  System.IO (>= 4.1) - framework: >= netstandard13
  System.IO.FileSystem (>= 4.0.1) - framework: >= netstandard13
  System.Text.Encodings.Web (>= 4.0) - framework: >= net451, >= netstandard13
Microsoft.CSharp (4.3) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Dynamic.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Linq (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Linq.Expressions (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.ObjectModel (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Reflection.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Reflection.Primitives (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Reflection.TypeExtensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
Microsoft.DotNet.PlatformAbstractions (1.1.1) - framework: >= net451, >= netstandard16
  System.AppContext (>= 4.1) - framework: >= netstandard13
  System.Collections (>= 4.0.11) - framework: >= netstandard13
  System.IO (>= 4.1) - framework: >= netstandard13
  System.IO.FileSystem (>= 4.0.1) - framework: >= netstandard13
  System.Reflection.TypeExtensions (>= 4.1) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.1) - framework: >= netstandard13
  System.Runtime.InteropServices (>= 4.1) - framework: >= netstandard13
  System.Runtime.InteropServices.RuntimeInformation (>= 4.0) - framework: >= netstandard13
Microsoft.Extensions.Configuration.Abstractions (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.Primitives (>= 1.0.1) - framework: >= netstandard10
  System.Linq (>= 4.1) - framework: >= netstandard10
Microsoft.Extensions.DependencyInjection.Abstractions (1.0.2) - framework: >= net451, >= netstandard16
  System.ComponentModel (>= 4.0.1) - framework: >= netstandard10
  System.Diagnostics.Debug (>= 4.0.11) - framework: >= netstandard10
  System.Globalization (>= 4.0.11) - framework: >= netstandard10
  System.Linq (>= 4.1) - framework: >= netstandard10
  System.Linq.Expressions (>= 4.1.1) - framework: >= netstandard10
  System.Reflection (>= 4.1) - framework: >= netstandard10
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard10
Microsoft.Extensions.DependencyModel (1.1.1) - framework: >= net451, >= netstandard16
  Microsoft.DotNet.PlatformAbstractions (>= 1.1.1) - framework: >= net451, netstandard13, >= netstandard16
  Newtonsoft.Json (>= 9.0.1) - framework: >= net451, netstandard13, >= netstandard16
  System.Diagnostics.Debug (>= 4.0.11) - framework: netstandard13, >= netstandard16
  System.Dynamic.Runtime (>= 4.0.11) - framework: netstandard13, >= netstandard16
  System.Linq (>= 4.1) - framework: netstandard13, >= netstandard16
Microsoft.Extensions.FileProviders.Abstractions (1.0.1) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.Primitives (>= 1.0.1) - framework: >= netstandard10
  System.IO (>= 4.1) - framework: >= netstandard10
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard10
Microsoft.Extensions.Logging.Abstractions (1.0.2) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.0.11) - framework: >= net45, >= netstandard11
  System.Collections.Concurrent (>= 4.0.12) - framework: >= net45, >= netstandard11
  System.Diagnostics.Debug (>= 4.0.11) - framework: >= net45, >= netstandard11
  System.Globalization (>= 4.0.11) - framework: >= net45, >= netstandard11
  System.Linq (>= 4.1) - framework: >= net45, >= netstandard11
  System.Reflection (>= 4.1) - framework: >= net45, >= netstandard11
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= net45, >= netstandard11
  System.Runtime.Extensions (>= 4.1) - framework: >= net45, >= netstandard11
  System.Runtime.InteropServices (>= 4.1) - framework: >= net45, >= netstandard11
Microsoft.Extensions.ObjectPool (1.0.1) - framework: >= net451, >= netstandard16
  System.Diagnostics.Debug (>= 4.0.11) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.1) - framework: >= netstandard13
  System.Threading (>= 4.0.11) - framework: >= netstandard13
Microsoft.Extensions.Options (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.DependencyInjection.Abstractions (>= 1.0.2) - framework: >= netstandard10
  Microsoft.Extensions.Primitives (>= 1.0.1) - framework: >= netstandard10
  System.ComponentModel (>= 4.0.1) - framework: >= netstandard10
  System.Diagnostics.Debug (>= 4.0.11) - framework: >= netstandard10
  System.Globalization (>= 4.0.11) - framework: >= netstandard10
  System.Linq (>= 4.1) - framework: >= netstandard10
  System.Linq.Expressions (>= 4.1.1) - framework: >= netstandard10
  System.Reflection (>= 4.1) - framework: >= netstandard10
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard10
  System.Runtime.Extensions (>= 4.1) - framework: >= netstandard10
  System.Threading (>= 4.0.11) - framework: >= netstandard10
Microsoft.Extensions.PlatformAbstractions (1.0) - framework: >= net451, >= netstandard16
  System.AppContext (>= 4.1) - framework: >= netstandard13
  System.Reflection (>= 4.1) - framework: >= netstandard13
  System.Reflection.Extensions (>= 4.0.1) - framework: >= netstandard13
  System.Reflection.TypeExtensions (>= 4.1) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.1) - framework: >= netstandard13
Microsoft.Extensions.Primitives (1.0.1) - framework: >= net451, >= netstandard16
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard10
  System.Runtime (>= 4.1) - framework: >= netstandard10
Microsoft.Net.Http.Headers (1.0.2) - framework: >= net451, >= netstandard16
  System.Buffers (>= 4.0) - framework: >= net45, >= netstandard11
  System.Collections (>= 4.0.11) - framework: >= net45, >= netstandard11
  System.Diagnostics.Contracts (>= 4.0.1) - framework: >= net45, >= netstandard11
  System.Globalization (>= 4.0.11) - framework: >= net45, >= netstandard11
  System.Linq (>= 4.1) - framework: >= net45, >= netstandard11
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= net45, >= netstandard11
  System.Runtime.Extensions (>= 4.1) - framework: >= net45, >= netstandard11
  System.Text.Encoding (>= 4.0.11) - framework: >= net45, >= netstandard11
Microsoft.NETCore.Platforms (1.1) - framework: >= net45, >= netstandard10, netstandard11, netstandard12, netstandard13, netstandard14
Microsoft.NETCore.Targets (1.1) - framework: >= net45, >= netstandard10, netstandard11, netstandard12, netstandard13, netstandard14
Microsoft.Win32.Primitives (4.3) - framework: >= net45, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
NETStandard.Library (1.6)
  Microsoft.NETCore.Platforms (>= 1.0.1) - framework: >= netstandard10
  Microsoft.Win32.Primitives (>= 4.0.1) - framework: >= net46, >= netstandard13
  System.AppContext (>= 4.1) - framework: >= net46, >= netstandard13
  System.Collections (>= 4.0.11) - framework: >= netstandard10
  System.Collections.Concurrent (>= 4.0.12) - framework: >= net45, >= netstandard11
  System.Console (>= 4.0) - framework: >= net46, >= netstandard13
  System.Diagnostics.Debug (>= 4.0.11) - framework: >= netstandard10
  System.Diagnostics.Tools (>= 4.0.1) - framework: >= netstandard10
  System.Diagnostics.Tracing (>= 4.1) - framework: >= net45, >= netstandard11
  System.Globalization (>= 4.0.11) - framework: >= netstandard10
  System.Globalization.Calendars (>= 4.0.1) - framework: >= net46, >= netstandard13
  System.IO (>= 4.1) - framework: >= netstandard10
  System.IO.Compression (>= 4.1) - framework: >= net45, >= netstandard11
  System.IO.Compression.ZipFile (>= 4.0.1) - framework: >= net46, >= netstandard13
  System.IO.FileSystem (>= 4.0.1) - framework: >= net46, >= netstandard13
  System.IO.FileSystem.Primitives (>= 4.0.1) - framework: >= net46, >= netstandard13
  System.Linq (>= 4.1) - framework: >= netstandard10
  System.Linq.Expressions (>= 4.1) - framework: >= netstandard10
  System.Net.Http (>= 4.1) - framework: >= net45, >= netstandard11
  System.Net.Primitives (>= 4.0.11) - framework: >= netstandard10
  System.Net.Sockets (>= 4.1) - framework: >= net46, >= netstandard13
  System.ObjectModel (>= 4.0.12) - framework: >= netstandard10
  System.Reflection (>= 4.1) - framework: >= netstandard10
  System.Reflection.Extensions (>= 4.0.1) - framework: >= netstandard10
  System.Reflection.Primitives (>= 4.0.1) - framework: >= netstandard10
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard10
  System.Runtime (>= 4.1) - framework: >= netstandard10
  System.Runtime.Extensions (>= 4.1) - framework: >= netstandard10
  System.Runtime.Handles (>= 4.0.1) - framework: >= net46, >= netstandard13
  System.Runtime.InteropServices (>= 4.1) - framework: >= net45, >= netstandard11
  System.Runtime.InteropServices.RuntimeInformation (>= 4.0) - framework: >= net45, >= netstandard11
  System.Runtime.Numerics (>= 4.0.1) - framework: >= net45, >= netstandard11
  System.Security.Cryptography.Algorithms (>= 4.2) - framework: >= net46, >= netstandard13
  System.Security.Cryptography.Encoding (>= 4.0) - framework: >= net46, >= netstandard13
  System.Security.Cryptography.Primitives (>= 4.0) - framework: >= net46, >= netstandard13
  System.Security.Cryptography.X509Certificates (>= 4.1) - framework: >= net46, >= netstandard13
  System.Text.Encoding (>= 4.0.11) - framework: >= netstandard10
  System.Text.Encoding.Extensions (>= 4.0.11) - framework: >= netstandard10
  System.Text.RegularExpressions (>= 4.1) - framework: >= netstandard10
  System.Threading (>= 4.0.11) - framework: >= netstandard10
  System.Threading.Tasks (>= 4.0.11) - framework: >= netstandard10
  System.Threading.Timer (>= 4.0.1) - framework: >= net451, >= netstandard12
  System.Xml.ReaderWriter (>= 4.0.11) - framework: >= netstandard10
  System.Xml.XDocument (>= 4.0.11) - framework: >= netstandard10
Newtonsoft.Json (10.0.1) - framework: >= net451, >= netstandard16
  Microsoft.CSharp (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Collections (>= 4.3) - framework: netstandard10, >= netstandard13
  System.ComponentModel.TypeConverter (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Dynamic.Runtime (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Globalization (>= 4.3) - framework: netstandard10, >= netstandard13
  System.IO (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Linq (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Linq.Expressions (>= 4.3) - framework: netstandard10, >= netstandard13
  System.ObjectModel (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Reflection (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Reflection.Extensions (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Runtime.Numerics (>= 4.3) - framework: >= netstandard13
  System.Runtime.Serialization.Formatters (>= 4.3) - framework: >= netstandard13
  System.Runtime.Serialization.Primitives (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Text.Encoding.Extensions (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Text.RegularExpressions (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Threading (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Xml.ReaderWriter (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Xml.XDocument (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Xml.XmlDocument (>= 4.3) - framework: >= netstandard13
runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.native.System (4.3) - framework: >= net45, >= netstandard11
  Microsoft.NETCore.Platforms (>= 1.1)
  Microsoft.NETCore.Targets (>= 1.1)
runtime.native.System.IO.Compression (4.3) - framework: >= net45, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1)
  Microsoft.NETCore.Targets (>= 1.1)
runtime.native.System.Net.Http (4.3) - framework: >= net45, >= netstandard16
  Microsoft.NETCore.Platforms (>= 1.1)
  Microsoft.NETCore.Targets (>= 1.1)
runtime.native.System.Security.Cryptography.Apple (4.3) - framework: >= net45, >= netstandard16
  runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (>= 4.3)
runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
  runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (4.3) - framework: >= net45, >= netstandard16
runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
System.AppContext (4.3) - framework: >= net451, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
System.Buffers (4.3) - framework: >= net45, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard11
  System.Diagnostics.Tracing (>= 4.3) - framework: >= netstandard11
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard11
  System.Runtime (>= 4.3) - framework: >= netstandard11
  System.Threading (>= 4.3) - framework: >= netstandard11
System.Collections (4.3) - framework: >= net45, >= netstandard10, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Collections.Concurrent (4.3) - framework: >= net45, >= netstandard11, netstandard14
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Tracing (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Reflection (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
System.Collections.NonGeneric (4.3) - framework: >= net451, >= netstandard16
  System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Threading (>= 4.3) - framework: >= netstandard13
System.Collections.Specialized (4.3) - framework: >= net451, >= netstandard16
  System.Collections.NonGeneric (>= 4.3) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.Globalization.Extensions (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Threading (>= 4.3) - framework: >= netstandard13
System.ComponentModel (4.3) - framework: >= net451, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.ComponentModel.Primitives (4.3) - framework: >= net462, >= netstandard16
  System.ComponentModel (>= 4.3) - framework: >= netstandard10
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard10
  System.Runtime (>= 4.3) - framework: >= netstandard10
System.ComponentModel.TypeConverter (4.3) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Collections.NonGeneric (>= 4.3) - framework: >= net462, >= netstandard15
  System.Collections.Specialized (>= 4.3) - framework: >= netstandard15
  System.ComponentModel (>= 4.3) - framework: netstandard10, >= netstandard15
  System.ComponentModel.Primitives (>= 4.3) - framework: net45, >= net462, netstandard10, >= netstandard15, winv4.5, wpv8.0, wpav8.1
  System.Globalization (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Linq (>= 4.3) - framework: >= netstandard15
  System.Reflection (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Reflection.Extensions (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Reflection.Primitives (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Reflection.TypeExtensions (>= 4.3) - framework: >= netstandard15
  System.Resources.ResourceManager (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Runtime (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Runtime.Extensions (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Threading (>= 4.3) - framework: netstandard10, >= netstandard15
System.Console (4.3) - framework: >= net46, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: >= netstandard13
System.Diagnostics.Contracts (4.3) - framework: >= net451, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Diagnostics.Debug (4.3) - framework: >= net45, >= netstandard10, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Diagnostics.DiagnosticSource (4.3) - framework: >= net45, netstandard13, >= netstandard16
  System.Collections (>= 4.3) - framework: netstandard11, >= netstandard13
  System.Diagnostics.Tracing (>= 4.3) - framework: netstandard11, >= netstandard13
  System.Reflection (>= 4.3) - framework: netstandard11, >= netstandard13
  System.Runtime (>= 4.3) - framework: netstandard11, >= netstandard13
  System.Threading (>= 4.3) - framework: netstandard11, >= netstandard13
System.Diagnostics.Tools (4.3) - framework: >= net451, >= netstandard10
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Diagnostics.Tracing (4.3) - framework: >= net45, >= netstandard11, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15
System.Dynamic.Runtime (4.3) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Linq (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Linq.Expressions (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.ObjectModel (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Reflection (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Reflection.Emit (>= 4.3) - framework: >= netstandard13
  System.Reflection.Emit.ILGeneration (>= 4.3) - framework: >= netstandard13
  System.Reflection.Primitives (>= 4.3) - framework: >= netstandard13
  System.Reflection.TypeExtensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Globalization (4.3) - framework: >= net45, >= netstandard10, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Globalization.Calendars (4.3) - framework: >= net451, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
System.Globalization.Extensions (4.3) - framework: >= net45, >= netstandard16
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard13
System.IO (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.IO.Compression (4.3) - framework: >= net45, >= netstandard11, netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  runtime.native.System (>= 4.3) - framework: >= netstandard13
  runtime.native.System.IO.Compression (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Buffers (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.IO (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime.Handles (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: dnxcore50, >= netstandard13
System.IO.Compression.ZipFile (4.3) - framework: >= net46, >= netstandard13
  System.Buffers (>= 4.3) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.IO.Compression (>= 4.3) - framework: >= netstandard13
  System.IO.FileSystem (>= 4.3) - framework: >= netstandard13
  System.IO.FileSystem.Primitives (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: >= netstandard13
System.IO.FileSystem (4.3) - framework: >= net45, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.IO.FileSystem.Primitives (>= 4.3) - framework: >= net46, >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Handles (>= 4.3) - framework: >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: >= netstandard13
System.IO.FileSystem.Primitives (4.3) - framework: >= net451, >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
System.Linq (4.3) - framework: >= net45, >= netstandard10, netstandard14
  System.Collections (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard16
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Linq.Expressions (4.3) - framework: >= net451, >= netstandard10
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.IO (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Linq (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.ObjectModel (>= 4.3) - framework: >= netstandard16
  System.Reflection (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard16
  System.Reflection.Emit (>= 4.3) - framework: >= netstandard16
  System.Reflection.Emit.ILGeneration (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Reflection.Emit.Lightweight (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Reflection.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Reflection.Primitives (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Reflection.TypeExtensions (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Net.Http (4.3.1) - framework: >= net45, >= netstandard11
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard13, >= netstandard16
  Microsoft.Win32.Primitives (>= 4.3) - framework: netstandard13
  runtime.native.System (>= 4.3) - framework: >= netstandard16
  runtime.native.System.Net.Http (>= 4.3) - framework: >= netstandard16
  runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16
  System.Collections (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Diagnostics.DiagnosticSource (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Diagnostics.Tracing (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Globalization (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Globalization.Extensions (>= 4.3) - framework: >= netstandard16
  System.IO (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16
  System.IO.Compression (>= 4.3) - framework: netstandard13
  System.IO.FileSystem (>= 4.3) - framework: >= netstandard16
  System.Net.Primitives (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Runtime.Handles (>= 4.3) - framework: netstandard13, >= netstandard16
  System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Security.Cryptography.Algorithms (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.Encoding (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.Primitives (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.X509Certificates (>= 4.3) - framework: >= net46, dnxcore50, netstandard13, >= netstandard16
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16
  System.Threading (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16
System.Net.Primitives (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13
  System.Runtime.Handles (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Net.Sockets (4.3) - framework: >= net46, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.Net.Primitives (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: >= netstandard13
System.Net.WebSockets (4.3) - framework: >= net451, >= netstandard16
  Microsoft.Win32.Primitives (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: >= netstandard13
System.ObjectModel (4.3) - framework: >= net451, >= netstandard10
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Reflection (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard12, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.IO (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.Reflection.Primitives (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.Reflection.Emit (4.3) - framework: >= net451, >= netstandard16
  System.IO (>= 4.3) - framework: >= netstandard11
  System.Reflection (>= 4.3) - framework: >= netstandard11
  System.Reflection.Emit.ILGeneration (>= 4.3) - framework: >= netstandard11
  System.Reflection.Primitives (>= 4.3) - framework: >= netstandard11
  System.Runtime (>= 4.3) - framework: >= netstandard11
System.Reflection.Emit.ILGeneration (4.3) - framework: >= net451, >= netstandard16
  System.Reflection (>= 4.3) - framework: >= netstandard10
  System.Reflection.Primitives (>= 4.3) - framework: >= netstandard10
  System.Runtime (>= 4.3) - framework: >= netstandard10
System.Reflection.Emit.Lightweight (4.3) - framework: >= net451, >= netstandard16
  System.Reflection (>= 4.3) - framework: >= netstandard10
  System.Reflection.Emit.ILGeneration (>= 4.3) - framework: >= netstandard10
  System.Reflection.Primitives (>= 4.3) - framework: >= netstandard10
  System.Runtime (>= 4.3) - framework: >= netstandard10
System.Reflection.Extensions (4.3) - framework: >= net45, >= netstandard10
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10
  System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard10
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Reflection.Primitives (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard12, netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Reflection.TypeExtensions (4.3) - framework: >= net451, >= netstandard16
  System.Reflection (>= 4.3) - framework: >= net462, dnxcore50, netstandard13, >= netstandard15
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard15
System.Resources.ResourceManager (4.3) - framework: >= net45, >= netstandard10, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard10
  System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard10
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Runtime (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard12, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard12, netstandard13, >= netstandard15
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard12, netstandard13, >= netstandard15
System.Runtime.Extensions (4.3) - framework: >= net45, >= netstandard10, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.Runtime.Handles (4.3) - framework: >= net45, >= netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
System.Runtime.InteropServices (4.3) - framework: >= net45, >= netstandard11, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
  System.Reflection (>= 4.3) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
  System.Reflection.Primitives (>= 4.3) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
  System.Runtime (>= 4.3) - framework: net462, >= net463, dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
  System.Runtime.Handles (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard15, netcore11
System.Runtime.InteropServices.RuntimeInformation (4.3) - framework: >= net45, >= netstandard11
  runtime.native.System (>= 4.3) - framework: >= netstandard11
  System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard11
  System.Reflection.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard11
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard11
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard11
  System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard11
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard11
System.Runtime.Numerics (4.3) - framework: >= net45, >= netstandard11
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Runtime.Serialization.Formatters (4.3) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.3) - framework: >= netstandard14
  System.Reflection (>= 4.3) - framework: >= netstandard14
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard14
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Serialization.Primitives (>= 4.3) - framework: >= net46, >= netstandard13
System.Runtime.Serialization.Primitives (4.3) - framework: >= net451, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Security.Claims (4.3) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.3) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Security.Principal (>= 4.3) - framework: >= netstandard13
System.Security.Cryptography.Algorithms (4.3) - framework: >= net45, >= netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard16
  runtime.native.System.Security.Cryptography.Apple (>= 4.3) - framework: >= netstandard16
  runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16
  System.Collections (>= 4.3) - framework: >= netstandard16
  System.IO (>= 4.3) - framework: >= net463, dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime (>= 4.3) - framework: >= net463, dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime.Handles (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime.Numerics (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.Encoding (>= 4.3) - framework: >= net463, dnxcore50, >= netstandard16
  System.Security.Cryptography.Primitives (>= 4.3) - framework: net46, net461, >= net463, dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Security.Cryptography.Cng (4.3) - framework: >= net451, >= netstandard16
  Microsoft.NETCore.Platforms (>= 1.1) - framework: netstandard14, >= netstandard16
  System.IO (>= 4.3) - framework: netstandard13, netstandard14, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: netstandard14, >= netstandard16
  System.Runtime (>= 4.3) - framework: netstandard13, netstandard14, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: netstandard14, >= netstandard16
  System.Runtime.Handles (>= 4.3) - framework: netstandard13, netstandard14, >= netstandard16
  System.Runtime.InteropServices (>= 4.3) - framework: netstandard14, >= netstandard16
  System.Security.Cryptography.Algorithms (>= 4.3) - framework: net46, net461, >= net463, netstandard13, netstandard14, >= netstandard16
  System.Security.Cryptography.Encoding (>= 4.3) - framework: netstandard14, >= netstandard16
  System.Security.Cryptography.Primitives (>= 4.3) - framework: net46, net461, >= net463, netstandard13, netstandard14, >= netstandard16
  System.Text.Encoding (>= 4.3) - framework: netstandard14, >= netstandard16
System.Security.Cryptography.Csp (4.3) - framework: >= net451, >= netstandard16
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.Reflection (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Runtime.Handles (>= 4.3) - framework: >= netstandard13
  System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard13
  System.Security.Cryptography.Algorithms (>= 4.3) - framework: >= net46, >= netstandard13
  System.Security.Cryptography.Encoding (>= 4.3) - framework: >= netstandard13
  System.Security.Cryptography.Primitives (>= 4.3) - framework: >= net46, >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: >= netstandard13
  System.Threading (>= 4.3) - framework: >= netstandard13
System.Security.Cryptography.Encoding (4.3) - framework: >= net45, >= netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard13
  System.Collections (>= 4.3) - framework: >= netstandard13
  System.Collections.Concurrent (>= 4.3) - framework: >= netstandard13
  System.Linq (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Runtime.Handles (>= 4.3) - framework: >= netstandard13
  System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard13
  System.Security.Cryptography.Primitives (>= 4.3) - framework: >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: >= netstandard13
System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard16
  runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= net463, >= netstandard16, monoandroid, monotouch, xamarinios, xamarinmac
  System.Collections (>= 4.3) - framework: >= netstandard16
  System.IO (>= 4.3) - framework: >= net463, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard16
  System.Runtime (>= 4.3) - framework: >= net463, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: >= net463, >= netstandard16
  System.Runtime.Handles (>= 4.3) - framework: >= netstandard16
  System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard16
  System.Runtime.Numerics (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.Algorithms (>= 4.3) - framework: >= net463, >= netstandard16
  System.Security.Cryptography.Encoding (>= 4.3) - framework: >= net463, >= netstandard16
  System.Security.Cryptography.Primitives (>= 4.3) - framework: >= net463, >= netstandard16
  System.Text.Encoding (>= 4.3) - framework: >= netstandard16
System.Security.Cryptography.Primitives (4.3) - framework: >= net45, >= netstandard13, netstandard14
  System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Threading (>= 4.3) - framework: >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: >= netstandard13
System.Security.Cryptography.X509Certificates (4.3) - framework: >= net451, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard16
  runtime.native.System (>= 4.3) - framework: >= netstandard16
  runtime.native.System.Net.Http (>= 4.3) - framework: >= netstandard16
  runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard16
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Globalization.Calendars (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.IO (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.IO.FileSystem (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.IO.FileSystem.Primitives (>= 4.3) - framework: >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime.Handles (>= 4.3) - framework: dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime.Numerics (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Security.Cryptography.Algorithms (>= 4.3) - framework: net46, >= net461, dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Security.Cryptography.Cng (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Security.Cryptography.Csp (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.Encoding (>= 4.3) - framework: net46, >= net461, dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.Primitives (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Security.Principal (4.3) - framework: >= net451, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Text.Encoding (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Text.Encoding.Extensions (4.3) - framework: >= net451, >= netstandard10
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Text.Encodings.Web (4.3) - framework: >= net451, >= netstandard16
  System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard10
  System.IO (>= 4.3) - framework: >= netstandard10
  System.Reflection (>= 4.3) - framework: >= netstandard10
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard10
  System.Runtime (>= 4.3) - framework: >= netstandard10
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard10
  System.Threading (>= 4.3) - framework: >= netstandard10
System.Text.RegularExpressions (4.3) - framework: >= net451, >= netstandard10
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard16, netcore11
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Threading (4.3) - framework: >= net45, >= netstandard10, netstandard13, netstandard14
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Threading.Tasks (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Threading.Tasks.Extensions (4.3) - framework: >= net451, >= netstandard13
  System.Collections (>= 4.3) - framework: >= netstandard10
  System.Runtime (>= 4.3) - framework: >= netstandard10
  System.Threading.Tasks (>= 4.3) - framework: >= netstandard10
System.Threading.Timer (4.3) - framework: >= net451, >= netstandard12
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard12
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard12
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard12
System.Xml.ReaderWriter (4.3) - framework: >= net451, >= netstandard10
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.IO (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.IO.FileSystem (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.IO.FileSystem.Primitives (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Text.Encoding.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Text.RegularExpressions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Threading.Tasks.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Xml.XDocument (4.3) - framework: >= net451, >= netstandard10
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Tools (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.IO (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Xml.ReaderWriter (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Xml.XmlDocument (4.3) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.3) - framework: >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: >= netstandard13
  System.Threading (>= 4.3) - framework: >= netstandard13
  System.Xml.ReaderWriter (>= 4.3) - framework: >= netstandard13
Contributor

0x53A commented Apr 30, 2017

The Resolving is only cpu bound if the algorithm degrades. That means the really relevant part was the change to fuseConflicts, the other performance optimizations would be unnecessary if the algorithm was perfect.

Currently it still degrades in a few situations, but it is already better than before.

Especially the last two commits are completely unnecessary performance-wise, my main motivation was readability and extracting it to a helper function, the benchmark was just curiosity.


For performance testing, it would be great if you had any other dependencies files which did correctly solve before (so that we can actually compare numbers), and took maybe a minute or two, so that we don't need to wait too long.

For the next round of improvements I want to set up a benchmark script that checks out a git sha, builds it, and runs a few paket installs against a few different paket.dependencies.


Before: https://github.com/fsprojects/Paket/releases/tag/5.0.0-alpha007
Now: commit f5deb48


  1. from #2289
#2289

redirects: on
framework: net46

source https://api.nuget.org/v3/index.json

nuget Akka.Persistence.SqlServer
nuget SQLProvider
nuget Microsoft.FSharpLu.Json
nuget Microsoft.Net.Http
nuget Microsoft.AspNet.WebApi.Client
nuget FSharp.Core redirects: force
nuget FSharp.Configuration
nuget FSharp.Formatting
nuget FSharp.Data
nuget FSharp.Data.TypeProviders
nuget Newtonsoft.Json
nuget FAKE
nuget SourceLink.Fake
nuget Akka
nuget Akka.FSharp
nuget Akka.Persistence
nuget Akka.Persistence.FSharp
nuget Akka.Persistence.Sql.Common
nuget Akka.Persistence.Query
nuget Akka.Persistence.Query.Sql
nuget Akka.Logger.Serilog
nuget Akka.Monitoring
nuget Akka.Monitoring.StatsD
nuget Akka.TestKit.NUnit
nuget Akka.TestKit.Xunit2
nuget Akka.Serialization.Wire
nuget FsPickler
nuget Serilog
nuget Serilog.Sinks.ElasticSearch
nuget Nest ~> 5
nuget RabbitMQ.Client
nuget SSH.NET
nuget Topshelf
nuget Topshelf.Serilog
nuget NUnit ~> 2
nuget NUnit.Runners
nuget NUnitTestAdapter
nuget TickSpec.NUnit content: none
nuget FsCheck
nuget FsCheck.Nunit
nuget System.Collections.Immutable
nuget Suave
nuget OctopusTools
nuget Suave.Swagger
nuget Quartz
nuget Akka.Quartz.Actor
nuget Oracle.ManagedDataAccess

Before: didn't finish after an hour
Now: 44 seconds - ready.


  1. from #2294 (comment)

The original paket.dependencies from the issue fails with an error, but this reduced one resolves correctly. (see #2305 for the failure)

source https://www.nuget.org/api/v2/

nuget NETStandard.Library <= 1.6.0
nuget Microsoft.AspNetCore.Mvc.Core

Now: 5 minutes, 1 second - ready.
Before: 1 hour, 8 minutes, 21 seconds - ready.

paket.log.txt

created lockfile

NUGET
remote: https://www.nuget.org/api/v2

Microsoft.AspNetCore.Authorization (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.Logging.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Options (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.Security.Claims (>= 4.0.1) - framework: >= netstandard13
Microsoft.AspNetCore.Hosting.Abstractions (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Hosting.Server.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.AspNetCore.Http.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Configuration.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.DependencyInjection.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.FileProviders.Abstractions (>= 1.0.1) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Logging.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
Microsoft.AspNetCore.Hosting.Server.Abstractions (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http.Features (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Configuration.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
Microsoft.AspNetCore.Http (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.AspNetCore.WebUtilities (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.ObjectPool (>= 1.0.1) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Options (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Net.Http.Headers (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.Buffers (>= 4.0) - framework: >= net451, >= netstandard13
  System.Threading (>= 4.0.11) - framework: >= netstandard13
Microsoft.AspNetCore.Http.Abstractions (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http.Features (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.Globalization.Extensions (>= 4.0.1) - framework: >= netstandard13
  System.Linq.Expressions (>= 4.1.1) - framework: >= netstandard13
  System.Reflection.TypeExtensions (>= 4.1) - framework: >= netstandard13
  System.Runtime.InteropServices (>= 4.1) - framework: >= netstandard13
  System.Text.Encodings.Web (>= 4.0) - framework: >= net451, >= netstandard13
Microsoft.AspNetCore.Http.Extensions (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.FileProviders.Abstractions (>= 1.0.1) - framework: >= net451, >= netstandard13
  Microsoft.Net.Http.Headers (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.Buffers (>= 4.0) - framework: >= net451, >= netstandard13
  System.IO.FileSystem (>= 4.0.1) - framework: >= netstandard13
Microsoft.AspNetCore.Http.Features (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.Primitives (>= 1.0.1) - framework: >= net451, >= netstandard13
  System.Collections (>= 4.0.11) - framework: >= netstandard13
  System.ComponentModel (>= 4.0.1) - framework: >= netstandard13
  System.Linq (>= 4.1) - framework: >= netstandard13
  System.Net.Primitives (>= 4.0.11) - framework: >= netstandard13
  System.Net.WebSockets (>= 4.0) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.1) - framework: >= netstandard13
  System.Security.Claims (>= 4.0.1) - framework: >= netstandard13
  System.Security.Cryptography.X509Certificates (>= 4.1) - framework: >= netstandard13
  System.Security.Principal (>= 4.0.1) - framework: >= netstandard13
Microsoft.AspNetCore.Mvc.Abstractions (1.0.3) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Routing.Abstractions (>= 1.0.3) - framework: >= net451, >= netstandard13
  Microsoft.CSharp (>= 4.0.1) - framework: >= netstandard13
  Microsoft.Net.Http.Headers (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.ComponentModel.TypeConverter (>= 4.1) - framework: >= netstandard13
  System.Reflection.Extensions (>= 4.0.1) - framework: >= netstandard13
  System.Text.Encoding.Extensions (>= 4.0.11) - framework: >= netstandard13
Microsoft.AspNetCore.Mvc.Core (1.0.3)
  Microsoft.AspNetCore.Authorization (>= 1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Hosting.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http (>= 1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Mvc.Abstractions (>= 1.0.3) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Routing (>= 1.0.3) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.DependencyModel (>= 1.0) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.FileProviders.Abstractions (>= 1.0.1) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.Logging.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.PlatformAbstractions (>= 1.0) - framework: >= net451, >= netstandard16
  System.Buffers (>= 4.0) - framework: >= net451, >= netstandard16
  System.Diagnostics.DiagnosticSource (>= 4.0) - framework: >= net451, >= netstandard16
  System.Text.Encoding (>= 4.0.11) - framework: >= netstandard16
Microsoft.AspNetCore.Routing (1.0.3) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http.Extensions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.AspNetCore.Routing.Abstractions (>= 1.0.3) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Logging.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.ObjectPool (>= 1.0.1) - framework: >= net451, >= netstandard13
  Microsoft.Extensions.Options (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.Collections (>= 4.0.11) - framework: >= netstandard13
  System.Text.RegularExpressions (>= 4.1) - framework: >= netstandard13
Microsoft.AspNetCore.Routing.Abstractions (1.0.3) - framework: >= net451, >= netstandard16
  Microsoft.AspNetCore.Http.Abstractions (>= 1.0.2) - framework: >= net451, >= netstandard13
  System.Collections.Concurrent (>= 4.0.12) - framework: >= netstandard13
  System.Reflection.Extensions (>= 4.0.1) - framework: >= netstandard13
  System.Threading.Tasks (>= 4.0.11) - framework: >= netstandard13
Microsoft.AspNetCore.WebUtilities (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.Primitives (>= 1.0.1) - framework: >= net451, >= netstandard13
  System.Buffers (>= 4.0) - framework: >= net451, >= netstandard13
  System.Collections (>= 4.0.11) - framework: >= netstandard13
  System.IO (>= 4.1) - framework: >= netstandard13
  System.IO.FileSystem (>= 4.0.1) - framework: >= netstandard13
  System.Text.Encodings.Web (>= 4.0) - framework: >= net451, >= netstandard13
Microsoft.CSharp (4.3) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Dynamic.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Linq (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Linq.Expressions (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.ObjectModel (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Reflection.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Reflection.Primitives (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Reflection.TypeExtensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
Microsoft.DotNet.PlatformAbstractions (1.1.1) - framework: >= net451, >= netstandard16
  System.AppContext (>= 4.1) - framework: >= netstandard13
  System.Collections (>= 4.0.11) - framework: >= netstandard13
  System.IO (>= 4.1) - framework: >= netstandard13
  System.IO.FileSystem (>= 4.0.1) - framework: >= netstandard13
  System.Reflection.TypeExtensions (>= 4.1) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.1) - framework: >= netstandard13
  System.Runtime.InteropServices (>= 4.1) - framework: >= netstandard13
  System.Runtime.InteropServices.RuntimeInformation (>= 4.0) - framework: >= netstandard13
Microsoft.Extensions.Configuration.Abstractions (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.Primitives (>= 1.0.1) - framework: >= netstandard10
  System.Linq (>= 4.1) - framework: >= netstandard10
Microsoft.Extensions.DependencyInjection.Abstractions (1.0.2) - framework: >= net451, >= netstandard16
  System.ComponentModel (>= 4.0.1) - framework: >= netstandard10
  System.Diagnostics.Debug (>= 4.0.11) - framework: >= netstandard10
  System.Globalization (>= 4.0.11) - framework: >= netstandard10
  System.Linq (>= 4.1) - framework: >= netstandard10
  System.Linq.Expressions (>= 4.1.1) - framework: >= netstandard10
  System.Reflection (>= 4.1) - framework: >= netstandard10
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard10
Microsoft.Extensions.DependencyModel (1.1.1) - framework: >= net451, >= netstandard16
  Microsoft.DotNet.PlatformAbstractions (>= 1.1.1) - framework: >= net451, netstandard13, >= netstandard16
  Newtonsoft.Json (>= 9.0.1) - framework: >= net451, netstandard13, >= netstandard16
  System.Diagnostics.Debug (>= 4.0.11) - framework: netstandard13, >= netstandard16
  System.Dynamic.Runtime (>= 4.0.11) - framework: netstandard13, >= netstandard16
  System.Linq (>= 4.1) - framework: netstandard13, >= netstandard16
Microsoft.Extensions.FileProviders.Abstractions (1.0.1) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.Primitives (>= 1.0.1) - framework: >= netstandard10
  System.IO (>= 4.1) - framework: >= netstandard10
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard10
Microsoft.Extensions.Logging.Abstractions (1.0.2) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.0.11) - framework: >= net45, >= netstandard11
  System.Collections.Concurrent (>= 4.0.12) - framework: >= net45, >= netstandard11
  System.Diagnostics.Debug (>= 4.0.11) - framework: >= net45, >= netstandard11
  System.Globalization (>= 4.0.11) - framework: >= net45, >= netstandard11
  System.Linq (>= 4.1) - framework: >= net45, >= netstandard11
  System.Reflection (>= 4.1) - framework: >= net45, >= netstandard11
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= net45, >= netstandard11
  System.Runtime.Extensions (>= 4.1) - framework: >= net45, >= netstandard11
  System.Runtime.InteropServices (>= 4.1) - framework: >= net45, >= netstandard11
Microsoft.Extensions.ObjectPool (1.0.1) - framework: >= net451, >= netstandard16
  System.Diagnostics.Debug (>= 4.0.11) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.1) - framework: >= netstandard13
  System.Threading (>= 4.0.11) - framework: >= netstandard13
Microsoft.Extensions.Options (1.0.2) - framework: >= net451, >= netstandard16
  Microsoft.Extensions.DependencyInjection.Abstractions (>= 1.0.2) - framework: >= netstandard10
  Microsoft.Extensions.Primitives (>= 1.0.1) - framework: >= netstandard10
  System.ComponentModel (>= 4.0.1) - framework: >= netstandard10
  System.Diagnostics.Debug (>= 4.0.11) - framework: >= netstandard10
  System.Globalization (>= 4.0.11) - framework: >= netstandard10
  System.Linq (>= 4.1) - framework: >= netstandard10
  System.Linq.Expressions (>= 4.1.1) - framework: >= netstandard10
  System.Reflection (>= 4.1) - framework: >= netstandard10
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard10
  System.Runtime.Extensions (>= 4.1) - framework: >= netstandard10
  System.Threading (>= 4.0.11) - framework: >= netstandard10
Microsoft.Extensions.PlatformAbstractions (1.0) - framework: >= net451, >= netstandard16
  System.AppContext (>= 4.1) - framework: >= netstandard13
  System.Reflection (>= 4.1) - framework: >= netstandard13
  System.Reflection.Extensions (>= 4.0.1) - framework: >= netstandard13
  System.Reflection.TypeExtensions (>= 4.1) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.1) - framework: >= netstandard13
Microsoft.Extensions.Primitives (1.0.1) - framework: >= net451, >= netstandard16
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard10
  System.Runtime (>= 4.1) - framework: >= netstandard10
Microsoft.Net.Http.Headers (1.0.2) - framework: >= net451, >= netstandard16
  System.Buffers (>= 4.0) - framework: >= net45, >= netstandard11
  System.Collections (>= 4.0.11) - framework: >= net45, >= netstandard11
  System.Diagnostics.Contracts (>= 4.0.1) - framework: >= net45, >= netstandard11
  System.Globalization (>= 4.0.11) - framework: >= net45, >= netstandard11
  System.Linq (>= 4.1) - framework: >= net45, >= netstandard11
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= net45, >= netstandard11
  System.Runtime.Extensions (>= 4.1) - framework: >= net45, >= netstandard11
  System.Text.Encoding (>= 4.0.11) - framework: >= net45, >= netstandard11
Microsoft.NETCore.Platforms (1.1) - framework: >= net45, >= netstandard10, netstandard11, netstandard12, netstandard13, netstandard14
Microsoft.NETCore.Targets (1.1) - framework: >= net45, >= netstandard10, netstandard11, netstandard12, netstandard13, netstandard14
Microsoft.Win32.Primitives (4.3) - framework: >= net45, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
NETStandard.Library (1.6)
  Microsoft.NETCore.Platforms (>= 1.0.1) - framework: >= netstandard10
  Microsoft.Win32.Primitives (>= 4.0.1) - framework: >= net46, >= netstandard13
  System.AppContext (>= 4.1) - framework: >= net46, >= netstandard13
  System.Collections (>= 4.0.11) - framework: >= netstandard10
  System.Collections.Concurrent (>= 4.0.12) - framework: >= net45, >= netstandard11
  System.Console (>= 4.0) - framework: >= net46, >= netstandard13
  System.Diagnostics.Debug (>= 4.0.11) - framework: >= netstandard10
  System.Diagnostics.Tools (>= 4.0.1) - framework: >= netstandard10
  System.Diagnostics.Tracing (>= 4.1) - framework: >= net45, >= netstandard11
  System.Globalization (>= 4.0.11) - framework: >= netstandard10
  System.Globalization.Calendars (>= 4.0.1) - framework: >= net46, >= netstandard13
  System.IO (>= 4.1) - framework: >= netstandard10
  System.IO.Compression (>= 4.1) - framework: >= net45, >= netstandard11
  System.IO.Compression.ZipFile (>= 4.0.1) - framework: >= net46, >= netstandard13
  System.IO.FileSystem (>= 4.0.1) - framework: >= net46, >= netstandard13
  System.IO.FileSystem.Primitives (>= 4.0.1) - framework: >= net46, >= netstandard13
  System.Linq (>= 4.1) - framework: >= netstandard10
  System.Linq.Expressions (>= 4.1) - framework: >= netstandard10
  System.Net.Http (>= 4.1) - framework: >= net45, >= netstandard11
  System.Net.Primitives (>= 4.0.11) - framework: >= netstandard10
  System.Net.Sockets (>= 4.1) - framework: >= net46, >= netstandard13
  System.ObjectModel (>= 4.0.12) - framework: >= netstandard10
  System.Reflection (>= 4.1) - framework: >= netstandard10
  System.Reflection.Extensions (>= 4.0.1) - framework: >= netstandard10
  System.Reflection.Primitives (>= 4.0.1) - framework: >= netstandard10
  System.Resources.ResourceManager (>= 4.0.1) - framework: >= netstandard10
  System.Runtime (>= 4.1) - framework: >= netstandard10
  System.Runtime.Extensions (>= 4.1) - framework: >= netstandard10
  System.Runtime.Handles (>= 4.0.1) - framework: >= net46, >= netstandard13
  System.Runtime.InteropServices (>= 4.1) - framework: >= net45, >= netstandard11
  System.Runtime.InteropServices.RuntimeInformation (>= 4.0) - framework: >= net45, >= netstandard11
  System.Runtime.Numerics (>= 4.0.1) - framework: >= net45, >= netstandard11
  System.Security.Cryptography.Algorithms (>= 4.2) - framework: >= net46, >= netstandard13
  System.Security.Cryptography.Encoding (>= 4.0) - framework: >= net46, >= netstandard13
  System.Security.Cryptography.Primitives (>= 4.0) - framework: >= net46, >= netstandard13
  System.Security.Cryptography.X509Certificates (>= 4.1) - framework: >= net46, >= netstandard13
  System.Text.Encoding (>= 4.0.11) - framework: >= netstandard10
  System.Text.Encoding.Extensions (>= 4.0.11) - framework: >= netstandard10
  System.Text.RegularExpressions (>= 4.1) - framework: >= netstandard10
  System.Threading (>= 4.0.11) - framework: >= netstandard10
  System.Threading.Tasks (>= 4.0.11) - framework: >= netstandard10
  System.Threading.Timer (>= 4.0.1) - framework: >= net451, >= netstandard12
  System.Xml.ReaderWriter (>= 4.0.11) - framework: >= netstandard10
  System.Xml.XDocument (>= 4.0.11) - framework: >= netstandard10
Newtonsoft.Json (10.0.1) - framework: >= net451, >= netstandard16
  Microsoft.CSharp (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Collections (>= 4.3) - framework: netstandard10, >= netstandard13
  System.ComponentModel.TypeConverter (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Dynamic.Runtime (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Globalization (>= 4.3) - framework: netstandard10, >= netstandard13
  System.IO (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Linq (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Linq.Expressions (>= 4.3) - framework: netstandard10, >= netstandard13
  System.ObjectModel (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Reflection (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Reflection.Extensions (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Runtime.Numerics (>= 4.3) - framework: >= netstandard13
  System.Runtime.Serialization.Formatters (>= 4.3) - framework: >= netstandard13
  System.Runtime.Serialization.Primitives (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Text.Encoding.Extensions (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Text.RegularExpressions (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Threading (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Xml.ReaderWriter (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Xml.XDocument (>= 4.3) - framework: netstandard10, >= netstandard13
  System.Xml.XmlDocument (>= 4.3) - framework: >= netstandard13
runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.native.System (4.3) - framework: >= net45, >= netstandard11
  Microsoft.NETCore.Platforms (>= 1.1)
  Microsoft.NETCore.Targets (>= 1.1)
runtime.native.System.IO.Compression (4.3) - framework: >= net45, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1)
  Microsoft.NETCore.Targets (>= 1.1)
runtime.native.System.Net.Http (4.3) - framework: >= net45, >= netstandard16
  Microsoft.NETCore.Platforms (>= 1.1)
  Microsoft.NETCore.Targets (>= 1.1)
runtime.native.System.Security.Cryptography.Apple (4.3) - framework: >= net45, >= netstandard16
  runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (>= 4.3)
runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
  runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
  runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (4.3) - framework: >= net45, >= netstandard16
runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard13, netstandard14
System.AppContext (4.3) - framework: >= net451, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
System.Buffers (4.3) - framework: >= net45, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard11
  System.Diagnostics.Tracing (>= 4.3) - framework: >= netstandard11
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard11
  System.Runtime (>= 4.3) - framework: >= netstandard11
  System.Threading (>= 4.3) - framework: >= netstandard11
System.Collections (4.3) - framework: >= net45, >= netstandard10, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Collections.Concurrent (4.3) - framework: >= net45, >= netstandard11, netstandard14
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Tracing (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Reflection (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
System.Collections.NonGeneric (4.3) - framework: >= net451, >= netstandard16
  System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Threading (>= 4.3) - framework: >= netstandard13
System.Collections.Specialized (4.3) - framework: >= net451, >= netstandard16
  System.Collections.NonGeneric (>= 4.3) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.Globalization.Extensions (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Threading (>= 4.3) - framework: >= netstandard13
System.ComponentModel (4.3) - framework: >= net451, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.ComponentModel.Primitives (4.3) - framework: >= net462, >= netstandard16
  System.ComponentModel (>= 4.3) - framework: >= netstandard10
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard10
  System.Runtime (>= 4.3) - framework: >= netstandard10
System.ComponentModel.TypeConverter (4.3) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Collections.NonGeneric (>= 4.3) - framework: >= net462, >= netstandard15
  System.Collections.Specialized (>= 4.3) - framework: >= netstandard15
  System.ComponentModel (>= 4.3) - framework: netstandard10, >= netstandard15
  System.ComponentModel.Primitives (>= 4.3) - framework: net45, >= net462, netstandard10, >= netstandard15, winv4.5, wpv8.0, wpav8.1
  System.Globalization (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Linq (>= 4.3) - framework: >= netstandard15
  System.Reflection (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Reflection.Extensions (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Reflection.Primitives (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Reflection.TypeExtensions (>= 4.3) - framework: >= netstandard15
  System.Resources.ResourceManager (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Runtime (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Runtime.Extensions (>= 4.3) - framework: netstandard10, >= netstandard15
  System.Threading (>= 4.3) - framework: netstandard10, >= netstandard15
System.Console (4.3) - framework: >= net46, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: >= netstandard13
System.Diagnostics.Contracts (4.3) - framework: >= net451, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Diagnostics.Debug (4.3) - framework: >= net45, >= netstandard10, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Diagnostics.DiagnosticSource (4.3) - framework: >= net45, netstandard13, >= netstandard16
  System.Collections (>= 4.3) - framework: netstandard11, >= netstandard13
  System.Diagnostics.Tracing (>= 4.3) - framework: netstandard11, >= netstandard13
  System.Reflection (>= 4.3) - framework: netstandard11, >= netstandard13
  System.Runtime (>= 4.3) - framework: netstandard11, >= netstandard13
  System.Threading (>= 4.3) - framework: netstandard11, >= netstandard13
System.Diagnostics.Tools (4.3) - framework: >= net451, >= netstandard10
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Diagnostics.Tracing (4.3) - framework: >= net45, >= netstandard11, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15
System.Dynamic.Runtime (4.3) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Linq (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Linq.Expressions (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.ObjectModel (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Reflection (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Reflection.Emit (>= 4.3) - framework: >= netstandard13
  System.Reflection.Emit.ILGeneration (>= 4.3) - framework: >= netstandard13
  System.Reflection.Primitives (>= 4.3) - framework: >= netstandard13
  System.Reflection.TypeExtensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Globalization (4.3) - framework: >= net45, >= netstandard10, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Globalization.Calendars (4.3) - framework: >= net451, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
System.Globalization.Extensions (4.3) - framework: >= net45, >= netstandard16
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard13
System.IO (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.IO.Compression (4.3) - framework: >= net45, >= netstandard11, netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  runtime.native.System (>= 4.3) - framework: >= netstandard13
  runtime.native.System.IO.Compression (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Buffers (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.IO (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime.Handles (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: dnxcore50, >= netstandard13
System.IO.Compression.ZipFile (4.3) - framework: >= net46, >= netstandard13
  System.Buffers (>= 4.3) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.IO.Compression (>= 4.3) - framework: >= netstandard13
  System.IO.FileSystem (>= 4.3) - framework: >= netstandard13
  System.IO.FileSystem.Primitives (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: >= netstandard13
System.IO.FileSystem (4.3) - framework: >= net45, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.IO.FileSystem.Primitives (>= 4.3) - framework: >= net46, >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Handles (>= 4.3) - framework: >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: >= netstandard13
System.IO.FileSystem.Primitives (4.3) - framework: >= net451, >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
System.Linq (4.3) - framework: >= net45, >= netstandard10, netstandard14
  System.Collections (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard16
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Linq.Expressions (4.3) - framework: >= net451, >= netstandard10
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.IO (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Linq (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.ObjectModel (>= 4.3) - framework: >= netstandard16
  System.Reflection (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard16
  System.Reflection.Emit (>= 4.3) - framework: >= netstandard16
  System.Reflection.Emit.ILGeneration (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Reflection.Emit.Lightweight (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Reflection.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Reflection.Primitives (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Reflection.TypeExtensions (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Net.Http (4.3.1) - framework: >= net45, >= netstandard11
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard13, >= netstandard16
  Microsoft.Win32.Primitives (>= 4.3) - framework: netstandard13
  runtime.native.System (>= 4.3) - framework: >= netstandard16
  runtime.native.System.Net.Http (>= 4.3) - framework: >= netstandard16
  runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16
  System.Collections (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Diagnostics.DiagnosticSource (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Diagnostics.Tracing (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Globalization (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Globalization.Extensions (>= 4.3) - framework: >= netstandard16
  System.IO (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16
  System.IO.Compression (>= 4.3) - framework: netstandard13
  System.IO.FileSystem (>= 4.3) - framework: >= netstandard16
  System.Net.Primitives (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Runtime.Handles (>= 4.3) - framework: netstandard13, >= netstandard16
  System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Security.Cryptography.Algorithms (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.Encoding (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.Primitives (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.X509Certificates (>= 4.3) - framework: >= net46, dnxcore50, netstandard13, >= netstandard16
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16
  System.Threading (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard16
  System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard11, netstandard13, >= netstandard16
System.Net.Primitives (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard11, >= netstandard13
  System.Runtime.Handles (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Net.Sockets (4.3) - framework: >= net46, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.Net.Primitives (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: >= netstandard13
System.Net.WebSockets (4.3) - framework: >= net451, >= netstandard16
  Microsoft.Win32.Primitives (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: >= netstandard13
System.ObjectModel (4.3) - framework: >= net451, >= netstandard10
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Reflection (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard12, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.IO (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.Reflection.Primitives (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.Reflection.Emit (4.3) - framework: >= net451, >= netstandard16
  System.IO (>= 4.3) - framework: >= netstandard11
  System.Reflection (>= 4.3) - framework: >= netstandard11
  System.Reflection.Emit.ILGeneration (>= 4.3) - framework: >= netstandard11
  System.Reflection.Primitives (>= 4.3) - framework: >= netstandard11
  System.Runtime (>= 4.3) - framework: >= netstandard11
System.Reflection.Emit.ILGeneration (4.3) - framework: >= net451, >= netstandard16
  System.Reflection (>= 4.3) - framework: >= netstandard10
  System.Reflection.Primitives (>= 4.3) - framework: >= netstandard10
  System.Runtime (>= 4.3) - framework: >= netstandard10
System.Reflection.Emit.Lightweight (4.3) - framework: >= net451, >= netstandard16
  System.Reflection (>= 4.3) - framework: >= netstandard10
  System.Reflection.Emit.ILGeneration (>= 4.3) - framework: >= netstandard10
  System.Reflection.Primitives (>= 4.3) - framework: >= netstandard10
  System.Runtime (>= 4.3) - framework: >= netstandard10
System.Reflection.Extensions (4.3) - framework: >= net45, >= netstandard10
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10
  System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard10
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Reflection.Primitives (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard12, netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Reflection.TypeExtensions (4.3) - framework: >= net451, >= netstandard16
  System.Reflection (>= 4.3) - framework: >= net462, dnxcore50, netstandard13, >= netstandard15
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard15
System.Resources.ResourceManager (4.3) - framework: >= net45, >= netstandard10, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard10
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard10
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard10
  System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard10
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Runtime (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard12, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard12, netstandard13, >= netstandard15
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard12, netstandard13, >= netstandard15
System.Runtime.Extensions (4.3) - framework: >= net45, >= netstandard10, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard15
System.Runtime.Handles (4.3) - framework: >= net45, >= netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
System.Runtime.InteropServices (4.3) - framework: >= net45, >= netstandard11, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
  System.Reflection (>= 4.3) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
  System.Reflection.Primitives (>= 4.3) - framework: dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
  System.Runtime (>= 4.3) - framework: net462, >= net463, dnxcore50, netstandard11, netstandard12, netstandard13, >= netstandard15, netcore11
  System.Runtime.Handles (>= 4.3) - framework: dnxcore50, netstandard13, >= netstandard15, netcore11
System.Runtime.InteropServices.RuntimeInformation (4.3) - framework: >= net45, >= netstandard11
  runtime.native.System (>= 4.3) - framework: >= netstandard11
  System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard11
  System.Reflection.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard11
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard11
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard11
  System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard11
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard11
System.Runtime.Numerics (4.3) - framework: >= net45, >= netstandard11
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard11, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Runtime.Serialization.Formatters (4.3) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.3) - framework: >= netstandard14
  System.Reflection (>= 4.3) - framework: >= netstandard14
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard14
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Serialization.Primitives (>= 4.3) - framework: >= net46, >= netstandard13
System.Runtime.Serialization.Primitives (4.3) - framework: >= net451, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Security.Claims (4.3) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.3) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Security.Principal (>= 4.3) - framework: >= netstandard13
System.Security.Cryptography.Algorithms (4.3) - framework: >= net45, >= netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard16
  runtime.native.System.Security.Cryptography.Apple (>= 4.3) - framework: >= netstandard16
  runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16
  System.Collections (>= 4.3) - framework: >= netstandard16
  System.IO (>= 4.3) - framework: >= net463, dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime (>= 4.3) - framework: >= net463, dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime.Handles (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime.Numerics (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.Encoding (>= 4.3) - framework: >= net463, dnxcore50, >= netstandard16
  System.Security.Cryptography.Primitives (>= 4.3) - framework: net46, net461, >= net463, dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Security.Cryptography.Cng (4.3) - framework: >= net451, >= netstandard16
  Microsoft.NETCore.Platforms (>= 1.1) - framework: netstandard14, >= netstandard16
  System.IO (>= 4.3) - framework: netstandard13, netstandard14, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: netstandard14, >= netstandard16
  System.Runtime (>= 4.3) - framework: netstandard13, netstandard14, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: netstandard14, >= netstandard16
  System.Runtime.Handles (>= 4.3) - framework: netstandard13, netstandard14, >= netstandard16
  System.Runtime.InteropServices (>= 4.3) - framework: netstandard14, >= netstandard16
  System.Security.Cryptography.Algorithms (>= 4.3) - framework: net46, net461, >= net463, netstandard13, netstandard14, >= netstandard16
  System.Security.Cryptography.Encoding (>= 4.3) - framework: netstandard14, >= netstandard16
  System.Security.Cryptography.Primitives (>= 4.3) - framework: net46, net461, >= net463, netstandard13, netstandard14, >= netstandard16
  System.Text.Encoding (>= 4.3) - framework: netstandard14, >= netstandard16
System.Security.Cryptography.Csp (4.3) - framework: >= net451, >= netstandard16
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.Reflection (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Runtime.Handles (>= 4.3) - framework: >= netstandard13
  System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard13
  System.Security.Cryptography.Algorithms (>= 4.3) - framework: >= net46, >= netstandard13
  System.Security.Cryptography.Encoding (>= 4.3) - framework: >= netstandard13
  System.Security.Cryptography.Primitives (>= 4.3) - framework: >= net46, >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: >= netstandard13
  System.Threading (>= 4.3) - framework: >= netstandard13
System.Security.Cryptography.Encoding (4.3) - framework: >= net45, >= netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: >= netstandard13
  runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard13
  System.Collections (>= 4.3) - framework: >= netstandard13
  System.Collections.Concurrent (>= 4.3) - framework: >= netstandard13
  System.Linq (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Runtime.Handles (>= 4.3) - framework: >= netstandard13
  System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard13
  System.Security.Cryptography.Primitives (>= 4.3) - framework: >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: >= netstandard13
System.Security.Cryptography.OpenSsl (4.3) - framework: >= net45, >= netstandard16
  runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= net463, >= netstandard16, monoandroid, monotouch, xamarinios, xamarinmac
  System.Collections (>= 4.3) - framework: >= netstandard16
  System.IO (>= 4.3) - framework: >= net463, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard16
  System.Runtime (>= 4.3) - framework: >= net463, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: >= net463, >= netstandard16
  System.Runtime.Handles (>= 4.3) - framework: >= netstandard16
  System.Runtime.InteropServices (>= 4.3) - framework: >= netstandard16
  System.Runtime.Numerics (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.Algorithms (>= 4.3) - framework: >= net463, >= netstandard16
  System.Security.Cryptography.Encoding (>= 4.3) - framework: >= net463, >= netstandard16
  System.Security.Cryptography.Primitives (>= 4.3) - framework: >= net463, >= netstandard16
  System.Text.Encoding (>= 4.3) - framework: >= netstandard16
System.Security.Cryptography.Primitives (4.3) - framework: >= net45, >= netstandard13, netstandard14
  System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Threading (>= 4.3) - framework: >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: >= netstandard13
System.Security.Cryptography.X509Certificates (4.3) - framework: >= net451, >= netstandard13
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard16
  runtime.native.System (>= 4.3) - framework: >= netstandard16
  runtime.native.System.Net.Http (>= 4.3) - framework: >= netstandard16
  runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard16
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Globalization.Calendars (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.IO (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.IO.FileSystem (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.IO.FileSystem.Primitives (>= 4.3) - framework: >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime.Handles (>= 4.3) - framework: dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime.Numerics (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Security.Cryptography.Algorithms (>= 4.3) - framework: net46, >= net461, dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Security.Cryptography.Cng (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Security.Cryptography.Csp (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.Encoding (>= 4.3) - framework: net46, >= net461, dnxcore50, netstandard13, netstandard14, >= netstandard16
  System.Security.Cryptography.OpenSsl (>= 4.3) - framework: >= netstandard16
  System.Security.Cryptography.Primitives (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Security.Principal (4.3) - framework: >= net451, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard10
System.Text.Encoding (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Text.Encoding.Extensions (4.3) - framework: >= net451, >= netstandard10
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Text.Encodings.Web (4.3) - framework: >= net451, >= netstandard16
  System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard10
  System.IO (>= 4.3) - framework: >= netstandard10
  System.Reflection (>= 4.3) - framework: >= netstandard10
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard10
  System.Runtime (>= 4.3) - framework: >= netstandard10
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard10
  System.Threading (>= 4.3) - framework: >= netstandard10
System.Text.RegularExpressions (4.3) - framework: >= net451, >= netstandard10
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, netstandard13, >= netstandard16, netcore11
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard16
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard16
System.Threading (4.3) - framework: >= net45, >= netstandard10, netstandard13, netstandard14
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Threading.Tasks (4.3) - framework: >= net45, >= netstandard10, netstandard11, netstandard13, netstandard14
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Threading.Tasks.Extensions (4.3) - framework: >= net451, >= netstandard13
  System.Collections (>= 4.3) - framework: >= netstandard10
  System.Runtime (>= 4.3) - framework: >= netstandard10
  System.Threading.Tasks (>= 4.3) - framework: >= netstandard10
System.Threading.Timer (4.3) - framework: >= net451, >= netstandard12
  Microsoft.NETCore.Platforms (>= 1.1) - framework: dnxcore50, >= netstandard12
  Microsoft.NETCore.Targets (>= 1.1) - framework: dnxcore50, >= netstandard12
  System.Runtime (>= 4.3) - framework: dnxcore50, >= netstandard12
System.Xml.ReaderWriter (4.3) - framework: >= net451, >= netstandard10
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.IO (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.IO.FileSystem (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.IO.FileSystem.Primitives (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime.InteropServices (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Text.Encoding.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Text.RegularExpressions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading.Tasks (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Threading.Tasks.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
System.Xml.XDocument (4.3) - framework: >= net451, >= netstandard10
  System.Collections (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Diagnostics.Tools (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Globalization (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.IO (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Reflection (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Runtime (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Threading (>= 4.3) - framework: dnxcore50, >= netstandard13
  System.Xml.ReaderWriter (>= 4.3) - framework: dnxcore50, netstandard10, >= netstandard13
System.Xml.XmlDocument (4.3) - framework: >= net451, >= netstandard16
  System.Collections (>= 4.3) - framework: >= netstandard13
  System.Diagnostics.Debug (>= 4.3) - framework: >= netstandard13
  System.Globalization (>= 4.3) - framework: >= netstandard13
  System.IO (>= 4.3) - framework: >= netstandard13
  System.Resources.ResourceManager (>= 4.3) - framework: >= netstandard13
  System.Runtime (>= 4.3) - framework: >= netstandard13
  System.Runtime.Extensions (>= 4.3) - framework: >= netstandard13
  System.Text.Encoding (>= 4.3) - framework: >= netstandard13
  System.Threading (>= 4.3) - framework: >= netstandard13
  System.Xml.ReaderWriter (>= 4.3) - framework: >= netstandard13
@matthid

This comment has been minimized.

Show comment
Hide comment
@matthid

matthid Apr 30, 2017

Member

Just a note on performance: We have two resolver states since I introduced the runtime stuff. It might make sense to measure them separately... (or at least it's hard to compare them with previous paket versions)

Member

matthid commented Apr 30, 2017

Just a note on performance: We have two resolver states since I introduced the runtime stuff. It might make sense to measure them separately... (or at least it's hard to compare them with previous paket versions)

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A Apr 30, 2017

Contributor

With an older version (I assume pre 5.alpha) cloudroutine could resolve the second file in 2 minutes, now it takes me 5 minutes on this branch, so this may be worth investigating.

ref #2294 (comment)

But it seems unrelated to this PR, because with 5.0alpha I'm still waiting for it to finish, and 5 minutes is better than never =).

Having seperate printfs would certainly help a bit to show where the bottleneck lies, but I don't think most users actually care, they just want it to work, otherwise they would still just use neverget.

Contributor

0x53A commented Apr 30, 2017

With an older version (I assume pre 5.alpha) cloudroutine could resolve the second file in 2 minutes, now it takes me 5 minutes on this branch, so this may be worth investigating.

ref #2294 (comment)

But it seems unrelated to this PR, because with 5.0alpha I'm still waiting for it to finish, and 5 minutes is better than never =).

Having seperate printfs would certainly help a bit to show where the bottleneck lies, but I don't think most users actually care, they just want it to work, otherwise they would still just use neverget.

@0x53A 0x53A changed the title from [WIP] performance to [Ready for Review] Slightly improve performance Apr 30, 2017

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A Apr 30, 2017

Contributor

@forki @cloudRoutine @matthid if you have some time, could you please test if you find any dependencies files that get slower after this pr?

If you just send me the paket.dependencies then I can also test it myself.

Contributor

0x53A commented Apr 30, 2017

@forki @cloudRoutine @matthid if you have some time, could you please test if you find any dependencies files that get slower after this pr?

If you just send me the paket.dependencies then I can also test it myself.

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A Apr 30, 2017

Contributor

regarding the last commit:

before:
image

image

The name array was recalculated for each iteration.

now:
image

Contributor

0x53A commented Apr 30, 2017

regarding the last commit:

before:
image

image

The name array was recalculated for each iteration.

now:
image

let c = compare x.Parent y.Parent
if c <> 0 then c else
let c = compare x.Name y.Name
if c <> 0 then c else 0

This comment has been minimized.

@matthid

matthid Apr 30, 2017

Member

How much does this block yield? Because its really ugly :P

@matthid

matthid Apr 30, 2017

Member

How much does this block yield? Because its really ugly :P

This comment has been minimized.

@0x53A

0x53A May 2, 2017

Contributor

Because the old code was a thing of beauty? :D

According to my benchmark (take it with a truckload of salt) it is slightly faster: https://gist.github.com/0x53A/b8bb15e040d152742fd067ce257e80a2

Method Mean Error StdDev Gen 0 Allocated
Old 656.1 ns 6.2845 ns 4.9066 ns 0.0508 264 B
New 105.5 ns 0.3383 ns 0.2641 ns - 0 B
@0x53A

0x53A May 2, 2017

Contributor

Because the old code was a thing of beauty? :D

According to my benchmark (take it with a truckload of salt) it is slightly faster: https://gist.github.com/0x53A/b8bb15e040d152742fd067ce257e80a2

Method Mean Error StdDev Gen 0 Allocated
Old 656.1 ns 6.2845 ns 4.9066 ns 0.0508 264 B
New 105.5 ns 0.3383 ns 0.2641 ns - 0 B
@@ -787,8 +815,7 @@ let Resolve (getVersionsF, getPackageDetailsF, groupName:GroupName, globalStrate
| stackpack, Some(alreadyExplored,exploredPackage) ->
let hasUnlisted = exploredPackage.Unlisted || flags.HasUnlisted
let flags =
StepFlags(flags.Ready,flags.UseUnlisted,hasUnlisted,flags.ForceBreak,flags.FirstTrial,flags.UnlistedSearch)
let flags = { flags with HasUnlisted = hasUnlisted }

This comment has been minimized.

@cloudRoutine

cloudRoutine Apr 30, 2017

Member
let flags = { flags with HasUnlisted = exploredPackage.Unlisted || flags.HasUnlisted }
@cloudRoutine

cloudRoutine Apr 30, 2017

Member
let flags = { flags with HasUnlisted = exploredPackage.Unlisted || flags.HasUnlisted }
@matthid

This comment has been minimized.

Show comment
Hide comment
@matthid

matthid Apr 30, 2017

Member

@0x53A After #2307 We could compare performance of these improvements with older paket versions as well (by setting the env var PAKET_DISABLE_RUNTIME_RESOLUTION to true ).
Currently the comparison is not really "fair" because we actually do a second resolver run...

Member

matthid commented Apr 30, 2017

@0x53A After #2307 We could compare performance of these improvements with older paket versions as well (by setting the env var PAKET_DISABLE_RUNTIME_RESOLUTION to true ).
Currently the comparison is not really "fair" because we actually do a second resolver run...

@matthid

This comment has been minimized.

Show comment
Hide comment
@matthid

matthid May 1, 2017

Member

I combined your improvements with #2307 in https://github.com/matthid/Paket/tree/combine_fixes but couldn't see any real benefits (But I didn't really measure anything)

Member

matthid commented May 1, 2017

I combined your improvements with #2307 in https://github.com/matthid/Paket/tree/combine_fixes but couldn't see any real benefits (But I didn't really measure anything)

@0x53A

This comment has been minimized.

Show comment
Hide comment
@0x53A

0x53A May 1, 2017

Contributor

In most cases, paket shouldn't be cpu bound, so any performance improvements in this area won't actually matter.

It will only actually improve performance if there are a lot of conflicts, and the solving algorithm degrades.

Contributor

0x53A commented May 1, 2017

In most cases, paket shouldn't be cpu bound, so any performance improvements in this area won't actually matter.

It will only actually improve performance if there are a lot of conflicts, and the solving algorithm degrades.

@forki forki merged commit 505c58c into fsprojects:master May 2, 2017

2 checks passed

continuous-integration/appveyor/pr AppVeyor build succeeded
Details
continuous-integration/travis-ci/pr The Travis CI build passed
Details

@0x53A 0x53A deleted the 0x53A:perf branch May 4, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment