Skip to content
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

Cleanup dependencies and add net6.0 TFM #2012

Merged
merged 8 commits into from
Jul 15, 2022

Conversation

martincostello
Copy link
Member

@martincostello martincostello commented May 27, 2022

  • Clean up the package dependencies as described in Cleanup the dependencies #2009.
  • Add a net6.0 TFM.
  • Resolve supported platform and obsolete warnings for .NET 6.
  • Add a TODO to correctly return the version for .NET Framework 4.8.1.

Resolves #2009.
Fixes #1687.

Ignore any BenchmarkDotNet.Disassembler NuGet packages created during a local build.
Clean up the package dependencies as described in #2009.
- Add a net6.0 TFM.
- Resolve supported platform and obsolete warnings for .NET 6.
Add a TODO to correctly return the version for .NET Framework 4.8.1.
- Suppress IDE0052 warning in Visual Studio.
- Suppress IDE0079 warning for redundant ReSharper warning in Visual Studio.
@martincostello
Copy link
Member Author

Manual testing with a "Modern" project file.

Interesting to note that the OS description between the two is different.

net48 is OS=Windows 11 (10.0.22000.675/21H2) where as net6.0 is Microsoft Windows 10.0.22000 Microsoft Windows NT 10.0.22000.0.

Results

net48

BenchmarkDotNet=v0.13.1.20220527-develop, OS=Windows 11 (10.0.22000.675/21H2)
Intel Core i9-9980HK CPU 2.40GHz, 1 CPU, 16 logical and 8 physical cores
  [Host]     : .NET Framework 4.8 (4.8.4510.0), X64 RyuJIT
  DefaultJob : .NET Framework 4.8 (4.8.4510.0), X64 RyuJIT

Method Mean Error StdDev Ratio Allocated Alloc Ratio
IndexOfAny_String 81.32 ns 1.617 ns 1.986 ns 1.00 - NA
IndexOfAny_Span_Array 48.77 ns 0.414 ns 0.387 ns 0.60 - NA
IndexOfAny_Span_Two_Chars 37.94 ns 0.375 ns 0.351 ns 0.47 - NA

net6.0

BenchmarkDotNet=v0.13.1.20220527-develop, OS=Microsoft Windows 10.0.22000 Microsoft Windows NT 10.0.22000.0
Intel Core i9-9980HK CPU 2.40GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK=6.0.300
  [Host]     : .NET 6.0.5 (6.0.522.21309), X64 RyuJIT
  DefaultJob : .NET 6.0.5 (6.0.522.21309), X64 RyuJIT

Method Mean Error StdDev Ratio RatioSD Allocated Alloc Ratio
IndexOfAny_String 7.811 ns 0.1408 ns 0.1317 ns 1.00 0.00 - NA
IndexOfAny_Span_Array 6.235 ns 0.0843 ns 0.0748 ns 0.80 0.02 - NA
IndexOfAny_Span_Two_Chars 4.871 ns 0.0542 ns 0.0507 ns 0.62 0.01 - NA

Project

Project Source

Program.cs

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Diagnosers;
using BenchmarkDotNet.Running;

BenchmarkRunner.Run<IndexOfAnyBenchmarks>();

[MemoryDiagnoser]
public class IndexOfAnyBenchmarks
{
    private const string AUrlWithAPathAndQueryString = "http://www.example.com/path/to/file.html?query=string";
    private static readonly char[] QueryStringAndFragmentTokens = new[] { '?', '#' };

    [Benchmark(Baseline = true)]
    public int IndexOfAny_String()
    {
        return AUrlWithAPathAndQueryString.IndexOfAny(QueryStringAndFragmentTokens);
    }

    [Benchmark]
    public int IndexOfAny_Span_Array()
    {
        return AUrlWithAPathAndQueryString.AsSpan().IndexOfAny(QueryStringAndFragmentTokens);
    }

    [Benchmark]
    public int IndexOfAny_Span_Two_Chars()
    {
        return AUrlWithAPathAndQueryString.AsSpan().IndexOfAny('?', '#');
    }
}

Project.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFrameworks>net48;net6.0</TargetFrameworks>
    <RootNamespace>DotNetBenchmarks</RootNamespace>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <LangVersion>latest</LangVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="BenchmarkDotNet" Version="0.13.1-develop" />
  </ItemGroup>
</Project>

global.json

{
  "sdk": {
    "version": "6.0.300"
  }
}

NuGet.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" />
    <add key="perfolizer-nightly" value="https://www.myget.org/F/perfolizer/api/v3/index.json" />
    <add key="folder1" value="C:\Coding\dotnet\BenchmarkDotNet\src\BenchmarkDotNet.Annotations\bin\Release\" />
    <add key="folder2" value="C:\Coding\dotnet\BenchmarkDotNet\src\BenchmarkDotNet\bin\Release\" />
  </packageSources>
</configuration>

@martincostello
Copy link
Member Author

Manual testing with an "Old" project file.

Results

BenchmarkDotNet=v0.13.1.20220527-develop, OS=Windows 11 (10.0.22000.675/21H2)
Intel Core i9-9980HK CPU 2.40GHz, 1 CPU, 16 logical and 8 physical cores
  [Host]     : .NET Framework 4.8 (4.8.4510.0), X86 LegacyJIT
  DefaultJob : .NET Framework 4.8 (4.8.4510.0), X86 LegacyJIT

Method Mean Error StdDev Ratio Allocated Alloc Ratio
IndexOfAny_String 104.21 ns 2.032 ns 1.802 ns 1.00 - NA
IndexOfAny_Span_Array 37.66 ns 0.701 ns 0.622 ns 0.36 - NA
IndexOfAny_Span_Two_Chars 21.22 ns 0.227 ns 0.212 ns 0.20 - NA

Project

Project Source

Program.cs

using System;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;

namespace DotNetBenchmarks
{
    internal static class Program
    {
        internal static void Main()
        {
            BenchmarkRunner.Run<IndexOfAnyBenchmarks>();
        }
    }

    [MemoryDiagnoser]
    public class IndexOfAnyBenchmarks
    {
        private const string AUrlWithAPathAndQueryString = "http://www.example.com/path/to/file.html?query=string";
        private static readonly char[] QueryStringAndFragmentTokens = new[] { '?', '#' };

        [Benchmark(Baseline = true)]
        public int IndexOfAny_String()
        {
            return AUrlWithAPathAndQueryString.IndexOfAny(QueryStringAndFragmentTokens);
        }

        [Benchmark]
        public int IndexOfAny_Span_Array()
        {
            return AUrlWithAPathAndQueryString.AsSpan().IndexOfAny(QueryStringAndFragmentTokens);
        }

        [Benchmark]
        public int IndexOfAny_Span_Two_Chars()
        {
            return AUrlWithAPathAndQueryString.AsSpan().IndexOfAny('?', '#');
        }
    }
}

Project.csproj

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.61\build\Microsoft.Diagnostics.Tracing.TraceEvent.props" Condition="Exists('..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.61\build\Microsoft.Diagnostics.Tracing.TraceEvent.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{4EE4875F-0A9D-49B1-9236-89C386D280A1}</ProjectGuid>
    <OutputType>Exe</OutputType>
    <RootNamespace>DotNetBenchmarks</RootNamespace>
    <AssemblyName>Project</AssemblyName>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <Deterministic>true</Deterministic>
    <NuGetPackageImportStamp>
    </NuGetPackageImportStamp>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="BenchmarkDotNet, Version=0.13.1.0, Culture=neutral, PublicKeyToken=aa0ca2f9092cefc4, processorArchitecture=MSIL">
      <HintPath>..\packages\BenchmarkDotNet.0.13.1-develop\lib\netstandard2.0\BenchmarkDotNet.dll</HintPath>
    </Reference>
    <Reference Include="BenchmarkDotNet.Annotations, Version=0.13.1.0, Culture=neutral, PublicKeyToken=aa0ca2f9092cefc4, processorArchitecture=MSIL">
      <HintPath>..\packages\BenchmarkDotNet.Annotations.0.13.1-develop\lib\netstandard2.0\BenchmarkDotNet.Annotations.dll</HintPath>
    </Reference>
    <Reference Include="CommandLine, Version=2.4.3.0, Culture=neutral, PublicKeyToken=de6f01bd326f8c32, processorArchitecture=MSIL">
      <HintPath>..\packages\CommandLineParser.2.4.3\lib\netstandard2.0\CommandLine.dll</HintPath>
    </Reference>
    <Reference Include="Dia2Lib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.61\lib\net45\Dia2Lib.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </Reference>
    <Reference Include="Iced, Version=1.8.0.0, Culture=neutral, PublicKeyToken=5baba79f4264913b, processorArchitecture=MSIL">
      <HintPath>..\packages\Iced.1.8.0\lib\net45\Iced.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.CodeAnalysis, Version=2.10.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.CodeAnalysis.Common.2.10.0\lib\netstandard1.3\Microsoft.CodeAnalysis.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.CodeAnalysis.CSharp, Version=2.10.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.2.10.0\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Diagnostics.FastSerialization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.61\lib\net45\Microsoft.Diagnostics.FastSerialization.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Diagnostics.NETCore.Client, Version=0.2.1.11701, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Diagnostics.NETCore.Client.0.2.61701\lib\netstandard2.0\Microsoft.Diagnostics.NETCore.Client.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Diagnostics.Runtime, Version=1.1.2.26102, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Diagnostics.Runtime.1.1.126102\lib\net45\Microsoft.Diagnostics.Runtime.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Diagnostics.Tracing.TraceEvent, Version=2.0.61.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.61\lib\net45\Microsoft.Diagnostics.Tracing.TraceEvent.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.DotNet.PlatformAbstractions, Version=3.1.6.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.DotNet.PlatformAbstractions.3.1.6\lib\net45\Microsoft.DotNet.PlatformAbstractions.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Win32.Registry.5.0.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath>
    </Reference>
    <Reference Include="OSExtensions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.61\lib\net45\OSExtensions.dll</HintPath>
    </Reference>
    <Reference Include="Perfolizer, Version=0.2.1.0, Culture=neutral, PublicKeyToken=e864f2ec9c0b6d4c, processorArchitecture=MSIL">
      <HintPath>..\packages\Perfolizer.0.2.1\lib\netstandard2.0\Perfolizer.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.AppContext, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll</HintPath>
    </Reference>
    <Reference Include="System.CodeDom, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\System.CodeDom.6.0.0\lib\net461\System.CodeDom.dll</HintPath>
    </Reference>
    <Reference Include="System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Collections.Immutable.1.5.0\lib\netstandard2.0\System.Collections.Immutable.dll</HintPath>
    </Reference>
    <Reference Include="System.ComponentModel.Composition" />
    <Reference Include="System.Console, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Console.4.3.0\lib\net46\System.Console.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Core" />
    <Reference Include="System.Diagnostics.FileVersionInfo, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Diagnostics.FileVersionInfo.4.3.0\lib\net46\System.Diagnostics.FileVersionInfo.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Diagnostics.StackTrace, Version=4.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Diagnostics.StackTrace.4.3.0\lib\net46\System.Diagnostics.StackTrace.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
      <HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.IO.FileSystem.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Management" />
    <Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll</HintPath>
    </Reference>
    <Reference Include="System.Numerics" />
    <Reference Include="System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
    </Reference>
    <Reference Include="System.Reflection.Metadata, Version=1.4.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Reflection.Metadata.1.6.0\lib\netstandard2.0\System.Reflection.Metadata.dll</HintPath>
    </Reference>
    <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
    </Reference>
    <Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.0.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Security.AccessControl, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Security.AccessControl.5.0.0\lib\net461\System.Security.AccessControl.dll</HintPath>
    </Reference>
    <Reference Include="System.Security.Cryptography.Algorithms, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net461\System.Security.Cryptography.Algorithms.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Security.Principal.Windows, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
    </Reference>
    <Reference Include="System.Text.Encoding.CodePages, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Text.Encoding.CodePages.4.3.0\lib\net46\System.Text.Encoding.CodePages.dll</HintPath>
    </Reference>
    <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
    </Reference>
    <Reference Include="System.Threading.Thread, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Threading.Thread.4.3.0\lib\net46\System.Threading.Thread.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.ValueTuple, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Xml.XmlDocument.4.3.0\lib\net46\System.Xml.XmlDocument.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Xml.XPath, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Xml.XPath.4.3.0\lib\net46\System.Xml.XPath.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="System.Xml.XPath.XDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Xml.XPath.XDocument.4.3.0\lib\net46\System.Xml.XPath.XDocument.dll</HintPath>
      <Private>True</Private>
      <Private>True</Private>
    </Reference>
    <Reference Include="TraceReloggerLib, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.61\lib\net45\TraceReloggerLib.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="App.config" />
    <None Include="packages.config" />
  </ItemGroup>
  <ItemGroup>
    <Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.2.6.1\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
    <Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.2.6.1\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.61\build\Microsoft.Diagnostics.Tracing.TraceEvent.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.2.0.61\build\Microsoft.Diagnostics.Tracing.TraceEvent.props'))" />
  </Target>
</Project>

App.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.4.3.0" newVersion="1.4.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.2.3.0" newVersion="1.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.IO.FileSystem" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Security.Cryptography.Algorithms" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Security.Cryptography.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.IO.FileSystem.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Xml.ReaderWriter" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Xml.XPath.XDocument" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

NuGet.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" />
    <add key="perfolizer-nightly" value="https://www.myget.org/F/perfolizer/api/v3/index.json" />
    <add key="folder1" value="C:\Coding\dotnet\BenchmarkDotNet\src\BenchmarkDotNet.Annotations\bin\Release\" />
    <add key="folder2" value="C:\Coding\dotnet\BenchmarkDotNet\src\BenchmarkDotNet\bin\Release\" />
  </packageSources>
</configuration>

packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="BenchmarkDotNet" version="0.13.1-develop" targetFramework="net461" />
  <package id="BenchmarkDotNet.Annotations" version="0.13.1-develop" targetFramework="net461" />
  <package id="CommandLineParser" version="2.4.3" targetFramework="net461" />
  <package id="Iced" version="1.8.0" targetFramework="net461" />
  <package id="Microsoft.CodeAnalysis.Analyzers" version="2.6.1" targetFramework="net461" developmentDependency="true" />
  <package id="Microsoft.CodeAnalysis.Common" version="2.10.0" targetFramework="net461" />
  <package id="Microsoft.CodeAnalysis.CSharp" version="2.10.0" targetFramework="net461" />
  <package id="Microsoft.Diagnostics.NETCore.Client" version="0.2.61701" targetFramework="net461" />
  <package id="Microsoft.Diagnostics.Runtime" version="1.1.126102" targetFramework="net461" />
  <package id="Microsoft.Diagnostics.Tracing.TraceEvent" version="2.0.61" targetFramework="net461" />
  <package id="Microsoft.DotNet.PlatformAbstractions" version="3.1.6" targetFramework="net461" />
  <package id="Microsoft.Win32.Registry" version="5.0.0" targetFramework="net461" />
  <package id="Perfolizer" version="0.2.1" targetFramework="net461" />
  <package id="System.AppContext" version="4.3.0" targetFramework="net461" />
  <package id="System.Buffers" version="4.4.0" targetFramework="net461" />
  <package id="System.CodeDom" version="6.0.0" targetFramework="net461" />
  <package id="System.Collections" version="4.3.0" targetFramework="net461" />
  <package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net461" />
  <package id="System.Collections.Immutable" version="1.5.0" targetFramework="net461" />
  <package id="System.Console" version="4.3.0" targetFramework="net461" />
  <package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net461" />
  <package id="System.Diagnostics.FileVersionInfo" version="4.3.0" targetFramework="net461" />
  <package id="System.Diagnostics.StackTrace" version="4.3.0" targetFramework="net461" />
  <package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net461" />
  <package id="System.Dynamic.Runtime" version="4.3.0" targetFramework="net461" />
  <package id="System.Globalization" version="4.3.0" targetFramework="net461" />
  <package id="System.IO.Compression" version="4.3.0" targetFramework="net461" />
  <package id="System.IO.FileSystem" version="4.3.0" targetFramework="net461" />
  <package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net461" />
  <package id="System.Linq" version="4.3.0" targetFramework="net461" />
  <package id="System.Linq.Expressions" version="4.3.0" targetFramework="net461" />
  <package id="System.Management" version="6.0.0" targetFramework="net461" />
  <package id="System.Memory" version="4.5.3" targetFramework="net461" />
  <package id="System.Numerics.Vectors" version="4.4.0" targetFramework="net461" />
  <package id="System.Reflection" version="4.3.0" targetFramework="net461" />
  <package id="System.Reflection.Emit" version="4.7.0" targetFramework="net461" />
  <package id="System.Reflection.Emit.Lightweight" version="4.7.0" targetFramework="net461" />
  <package id="System.Reflection.Metadata" version="1.6.0" targetFramework="net461" />
  <package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net461" />
  <package id="System.Runtime" version="4.3.0" targetFramework="net461" />
  <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.3" targetFramework="net461" />
  <package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net461" />
  <package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net461" />
  <package id="System.Runtime.InteropServices.RuntimeInformation" version="4.0.0" targetFramework="net461" />
  <package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net461" />
  <package id="System.Security.AccessControl" version="5.0.0" targetFramework="net461" />
  <package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net461" />
  <package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net461" />
  <package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net461" />
  <package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net461" />
  <package id="System.Security.Principal.Windows" version="5.0.0" targetFramework="net461" />
  <package id="System.Text.Encoding" version="4.3.0" targetFramework="net461" />
  <package id="System.Text.Encoding.CodePages" version="4.3.0" targetFramework="net461" />
  <package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net461" />
  <package id="System.Threading" version="4.3.0" targetFramework="net461" />
  <package id="System.Threading.Tasks" version="4.3.0" targetFramework="net461" />
  <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net461" />
  <package id="System.Threading.Tasks.Parallel" version="4.3.0" targetFramework="net461" />
  <package id="System.Threading.Thread" version="4.3.0" targetFramework="net461" />
  <package id="System.ValueTuple" version="4.3.0" targetFramework="net461" />
  <package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net461" />
  <package id="System.Xml.XDocument" version="4.3.0" targetFramework="net461" />
  <package id="System.Xml.XmlDocument" version="4.3.0" targetFramework="net461" />
  <package id="System.Xml.XPath" version="4.3.0" targetFramework="net461" />
  <package id="System.Xml.XPath.XDocument" version="4.3.0" targetFramework="net461" />
</packages>

@martincostello martincostello marked this pull request as ready for review May 27, 2022 14:01
@martincostello
Copy link
Member Author

martincostello commented May 27, 2022

Interesting to note that the OS description between the two is different.

net48 is OS=Windows 11 (10.0.22000.675/21H2) where as net6.0 is Microsoft Windows 10.0.22000 Microsoft Windows NT 10.0.22000.0.

This appears to be because the implementations between RuntimeEnvironment and RuntimeInformation are more different than I thought they were when I made this change as-per the note in #2009:

  1. Consider a net6.0 or newer target.

Either the difference is accepted and I change the format for net6.0 to not duplicate, I could not remove Microsoft.DotNet.PlatformAbstractions for the net6.0 TFM, or something else.

The latest version of the PlatformAbstractions code before it was removed is here.

@martincostello
Copy link
Member Author

If I take the PlatformApis code and condense it into the same class and use it like the below, then the same description is returned on my local machine for net48 and net6.0.

#else
-            operatingSystem = OSDescription;
-            operatingSystemVersion = Environment.OSVersion.VersionString;
+            operatingSystem = PlatformApis.GetOSName();
+            operatingSystemVersion = PlatformApis.GetOSVersion();
#endif
PlatformApis.cs
using System;
using System.IO;
using System.Runtime.InteropServices;

namespace BenchmarkDotNet.Portability
{
    // Adapted from https://github.com/dotnet/runtime/tree/v5.0.0-preview.5.20278.1/src/installer/managed/Microsoft.DotNet.PlatformAbstractions/Native

    internal static class PlatformApis
    {
        private class DistroInfo
        {
            public string Id;
            public string VersionId;
        }

        private enum Platform
        {
            Unknown = 0,
            Windows = 1,
            Linux = 2,
            Darwin = 3,
            FreeBSD = 4
        }

        private static readonly Lazy<Platform> _platform = new Lazy<Platform>(DetermineOSPlatform);
        private static readonly Lazy<DistroInfo> _distroInfo = new Lazy<DistroInfo>(LoadDistroInfo);

        public static string GetOSName()
        {
            switch (GetOSPlatform())
            {
                case Platform.Windows:
                    return "Windows";
                case Platform.Linux:
                    return GetDistroId() ?? "Linux";
                case Platform.Darwin:
                    return "Mac OS X";
                case Platform.FreeBSD:
                    return "FreeBSD";
                default:
                    return "Unknown";
            }
        }

        public static string GetOSVersion()
        {
            switch (GetOSPlatform())
            {
                case Platform.Windows:
                    return NativeMethods.Windows.RtlGetVersion() ?? string.Empty;
                case Platform.Linux:
                    return GetDistroVersionId() ?? string.Empty;
                case Platform.Darwin:
                    return GetDarwinVersion() ?? string.Empty;
                case Platform.FreeBSD:
                    return GetFreeBSDVersion() ?? string.Empty;
                default:
                    return string.Empty;
            }
        }

        private static string GetDarwinVersion()
        {
            Version version;
            var kernelRelease = NativeMethods.Darwin.GetKernelRelease();
            if (!Version.TryParse(kernelRelease, out version) || version.Major < 5)
            {
                // 10.0 covers all versions prior to Darwin 5
                // Similarly, if the version is not a valid version number, but we have still detected that it is Darwin, we just assume
                // it is OS X 10.0
                return "10.0";
            }
            else
            {
                // Mac OS X 10.1 mapped to Darwin 5.x, and the mapping continues that way
                // So just subtract 4 from the Darwin version.
                // https://en.wikipedia.org/wiki/Darwin_%28operating_system%29
                return $"10.{version.Major - 4}";
            }
        }

        private static string GetFreeBSDVersion()
        {
            // This is same as sysctl kern.version
            // FreeBSD 11.0-RELEASE-p1 FreeBSD 11.0-RELEASE-p1 #0 r306420: Thu Sep 29 01:43:23 UTC 2016     root@releng2.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC
            // What we want is major release as minor releases should be compatible.
            try
            {
                // second token up to first dot
                return System.Runtime.InteropServices.RuntimeInformation.OSDescription.Split()[1].Split('.')[0];
            }
            catch
            {
                return string.Empty;
            }
        }

        private static Platform GetOSPlatform()
        {
            return _platform.Value;
        }

        private static string GetDistroId()
        {
            return _distroInfo.Value?.Id;
        }

        private static string GetDistroVersionId()
        {
            return _distroInfo.Value?.VersionId;
        }

        private static DistroInfo LoadDistroInfo()
        {
            DistroInfo result = null;

            // Sample os-release file:
            //   NAME="Ubuntu"
            //   VERSION = "14.04.3 LTS, Trusty Tahr"
            //   ID = ubuntu
            //   ID_LIKE = debian
            //   PRETTY_NAME = "Ubuntu 14.04.3 LTS"
            //   VERSION_ID = "14.04"
            //   HOME_URL = "http://www.ubuntu.com/"
            //   SUPPORT_URL = "http://help.ubuntu.com/"
            //   BUG_REPORT_URL = "http://bugs.launchpad.net/ubuntu/"
            // We use ID and VERSION_ID

            if (File.Exists("/etc/os-release"))
            {
                var lines = File.ReadAllLines("/etc/os-release");
                result = new DistroInfo();
                foreach (var line in lines)
                {
                    if (line.StartsWith("ID=", StringComparison.Ordinal))
                    {
                        result.Id = line.Substring(3).Trim('"', '\'');
                    }
                    else if (line.StartsWith("VERSION_ID=", StringComparison.Ordinal))
                    {
                        result.VersionId = line.Substring(11).Trim('"', '\'');
                    }
                }
            }

            if (result != null)
            {
                result = NormalizeDistroInfo(result);
            }

            return result;
        }

        // For some distros, we don't want to use the full version from VERSION_ID. One example is
        // Red Hat Enterprise Linux, which includes a minor version in their VERSION_ID but minor
        // versions are backwards compatable.
        //
        // In this case, we'll normalized RIDs like 'rhel.7.2' and 'rhel.7.3' to a generic
        // 'rhel.7'. This brings RHEL in line with other distros like CentOS or Debian which
        // don't put minor version numbers in their VERSION_ID fields because all minor versions
        // are backwards compatible.
        private static DistroInfo NormalizeDistroInfo(DistroInfo distroInfo)
        {
            // Handle if VersionId is null by just setting the index to -1.
            int lastVersionNumberSeparatorIndex = distroInfo.VersionId?.IndexOf('.') ?? -1;

            if (lastVersionNumberSeparatorIndex != -1 && distroInfo.Id == "alpine")
            {
                // For Alpine, the version reported has three components, so we need to find the second version separator
                lastVersionNumberSeparatorIndex = distroInfo.VersionId.IndexOf('.', lastVersionNumberSeparatorIndex + 1);
            }

            if (lastVersionNumberSeparatorIndex != -1 && (distroInfo.Id == "rhel" || distroInfo.Id == "alpine"))
            {
                distroInfo.VersionId = distroInfo.VersionId.Substring(0, lastVersionNumberSeparatorIndex);
            }

            return distroInfo;
        }

        private static Platform DetermineOSPlatform()
        {
            if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows))
            {
                return Platform.Windows;
            }
            if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Linux))
            {
                return Platform.Linux;
            }
            if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.OSX))
            {
                return Platform.Darwin;
            }
            if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Create("FREEBSD")))
            {
                return Platform.FreeBSD;
            }

            return Platform.Unknown;
        }

        private static partial class NativeMethods
        {
            public static class Darwin
            {
                private const int CTL_KERN = 1;
                private const int KERN_OSRELEASE = 2;

                public unsafe static string GetKernelRelease()
                {
                    const uint BUFFER_LENGTH = 32;

                    var name = stackalloc int[2];
                    name[0] = CTL_KERN;
                    name[1] = KERN_OSRELEASE;

                    var buf = stackalloc byte[(int)BUFFER_LENGTH];
                    var len = stackalloc uint[1];
                    *len = BUFFER_LENGTH;

                    try
                    {
                        // If the buffer isn't big enough, it seems sysctl still returns 0 and just sets len to the
                        // necessary buffer size. This appears to be contrary to the man page, but it's easy to detect
                        // by simply checking len against the buffer length.
                        if (sysctl(name, 2, buf, len, IntPtr.Zero, 0) == 0 && *len < BUFFER_LENGTH)
                        {
                            return Marshal.PtrToStringAnsi((IntPtr)buf, (int)*len);
                        }
                    }
                    catch (Exception ex)
                    {
                        throw new PlatformNotSupportedException("Error reading Darwin Kernel Version", ex);
                    }
                    throw new PlatformNotSupportedException("Unknown error reading Darwin Kernel Version");
                }

                [DllImport("libc")]
                private unsafe static extern int sysctl(
                    int* name,
                    uint namelen,
                    byte* oldp,
                    uint* oldlenp,
                    IntPtr newp,
                    uint newlen);
            }

            public static class Unix
            {
                public unsafe static string GetUname()
                {
                    // Utsname shouldn't be larger than 2K
                    var buf = stackalloc byte[2048];

                    try
                    {
                        if (uname((IntPtr)buf) == 0)
                        {
                            return Marshal.PtrToStringAnsi((IntPtr)buf);
                        }
                    }
                    catch (Exception ex)
                    {
                        throw new PlatformNotSupportedException("Error reading Unix name", ex);
                    }
                    throw new PlatformNotSupportedException("Unknown error reading Unix name");
                }

                [DllImport("libc")]
                private static extern int uname(IntPtr utsname);
            }

            public static class Windows
            {
                [StructLayout(LayoutKind.Sequential)]
                internal struct RTL_OSVERSIONINFOEX
                {
                    internal uint dwOSVersionInfoSize;
                    internal uint dwMajorVersion;
                    internal uint dwMinorVersion;
                    internal uint dwBuildNumber;
                    internal uint dwPlatformId;
                    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
                    internal string szCSDVersion;
                }

                // This call avoids the shimming Windows does to report old versions
                [DllImport("ntdll")]
                private static extern int RtlGetVersion(out RTL_OSVERSIONINFOEX lpVersionInformation);

                internal static string RtlGetVersion()
                {
                    RTL_OSVERSIONINFOEX osvi = new RTL_OSVERSIONINFOEX();
                    osvi.dwOSVersionInfoSize = (uint)Marshal.SizeOf(osvi);
                    if (RtlGetVersion(out osvi) == 0)
                    {
                        return $"{osvi.dwMajorVersion}.{osvi.dwMinorVersion}.{osvi.dwBuildNumber}";
                    }
                    else
                    {
                        return null;
                    }
                }
            }
        }
    }
}

@ericstj
Copy link
Member

ericstj commented May 27, 2022

A good test to use to verify that this is working is that you shouldn't see any old packages downloaded or in the assets file when targeting .net6.0. I normally test that by creating a sample project and referencing the package to test and using a local packages folder. It would be good to test on netstandard2.0 as well since that shouldn't be bringing in the old packages either.

@martincostello
Copy link
Member Author

.deps.json file for my test project from bin\Release\net6.0.

{
  "runtimeTarget": {
    "name": ".NETCoreApp,Version=v6.0",
    "signature": ""
  },
  "compilationOptions": {},
  "targets": {
    ".NETCoreApp,Version=v6.0": {
      "_BDN-2009/1.0.0": {
        "dependencies": {
          "BenchmarkDotNet": "0.13.1-develop"
        },
        "runtime": {
          "_BDN-2009.dll": {}
        }
      },
      "BenchmarkDotNet/0.13.1-develop": {
        "dependencies": {
          "BenchmarkDotNet.Annotations": "0.13.1-develop",
          "CommandLineParser": "2.4.3",
          "Iced": "1.8.0",
          "Microsoft.CodeAnalysis.CSharp": "2.10.0",
          "Microsoft.Diagnostics.NETCore.Client": "0.2.61701",
          "Microsoft.Diagnostics.Runtime": "1.1.126102",
          "Microsoft.Diagnostics.Tracing.TraceEvent": "2.0.61",
          "Perfolizer": "0.2.1",
          "System.Management": "6.0.0",
          "System.Reflection.Emit": "4.7.0",
          "System.Reflection.Emit.Lightweight": "4.7.0",
          "System.Threading.Tasks.Extensions": "4.5.4"
        },
        "runtime": {
          "lib/net6.0/BenchmarkDotNet.dll": {
            "assemblyVersion": "0.13.1.0",
            "fileVersion": "0.13.1.0"
          }
        }
      },
      "BenchmarkDotNet.Annotations/0.13.1-develop": {
        "runtime": {
          "lib/netstandard2.0/BenchmarkDotNet.Annotations.dll": {
            "assemblyVersion": "0.13.1.0",
            "fileVersion": "0.13.1.0"
          }
        }
      },
      "CommandLineParser/2.4.3": {
        "runtime": {
          "lib/netstandard2.0/CommandLine.dll": {
            "assemblyVersion": "2.4.3.0",
            "fileVersion": "2.4.3.0"
          }
        }
      },
      "Iced/1.8.0": {
        "runtime": {
          "lib/netstandard2.1/Iced.dll": {
            "assemblyVersion": "1.8.0.0",
            "fileVersion": "1.8.0.0"
          }
        }
      },
      "Microsoft.CodeAnalysis.Analyzers/2.6.1": {},
      "Microsoft.CodeAnalysis.Common/2.10.0": {
        "dependencies": {
          "Microsoft.CodeAnalysis.Analyzers": "2.6.1",
          "System.AppContext": "4.3.0",
          "System.Collections": "4.3.0",
          "System.Collections.Concurrent": "4.3.0",
          "System.Collections.Immutable": "1.5.0",
          "System.Console": "4.3.0",
          "System.Diagnostics.Debug": "4.3.0",
          "System.Diagnostics.FileVersionInfo": "4.3.0",
          "System.Diagnostics.StackTrace": "4.3.0",
          "System.Diagnostics.Tools": "4.3.0",
          "System.Dynamic.Runtime": "4.3.0",
          "System.Globalization": "4.3.0",
          "System.IO.Compression": "4.3.0",
          "System.IO.FileSystem": "4.3.0",
          "System.IO.FileSystem.Primitives": "4.3.0",
          "System.Linq": "4.3.0",
          "System.Linq.Expressions": "4.3.0",
          "System.Reflection": "4.3.0",
          "System.Reflection.Metadata": "1.6.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Runtime.InteropServices": "4.3.0",
          "System.Runtime.Numerics": "4.3.0",
          "System.Security.Cryptography.Algorithms": "4.3.0",
          "System.Security.Cryptography.Encoding": "4.3.0",
          "System.Security.Cryptography.X509Certificates": "4.3.0",
          "System.Text.Encoding": "4.3.0",
          "System.Text.Encoding.CodePages": "4.3.0",
          "System.Text.Encoding.Extensions": "4.3.0",
          "System.Threading": "4.3.0",
          "System.Threading.Tasks": "4.3.0",
          "System.Threading.Tasks.Extensions": "4.5.4",
          "System.Threading.Tasks.Parallel": "4.3.0",
          "System.Threading.Thread": "4.3.0",
          "System.ValueTuple": "4.3.0",
          "System.Xml.ReaderWriter": "4.3.0",
          "System.Xml.XDocument": "4.3.0",
          "System.Xml.XPath.XDocument": "4.3.0",
          "System.Xml.XmlDocument": "4.3.0"
        },
        "runtime": {
          "lib/netstandard1.3/Microsoft.CodeAnalysis.dll": {
            "assemblyVersion": "2.10.0.0",
            "fileVersion": "2.10.0.0"
          }
        },
        "resources": {
          "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "cs"
          },
          "lib/netstandard1.3/de/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "de"
          },
          "lib/netstandard1.3/es/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "es"
          },
          "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "fr"
          },
          "lib/netstandard1.3/it/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "it"
          },
          "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "ja"
          },
          "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "ko"
          },
          "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "pl"
          },
          "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "pt-BR"
          },
          "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "ru"
          },
          "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "tr"
          },
          "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "zh-Hans"
          },
          "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "zh-Hant"
          }
        }
      },
      "Microsoft.CodeAnalysis.CSharp/2.10.0": {
        "dependencies": {
          "Microsoft.CodeAnalysis.Common": "2.10.0"
        },
        "runtime": {
          "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.dll": {
            "assemblyVersion": "2.10.0.0",
            "fileVersion": "2.10.0.0"
          }
        },
        "resources": {
          "lib/netstandard1.3/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "cs"
          },
          "lib/netstandard1.3/de/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "de"
          },
          "lib/netstandard1.3/es/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "es"
          },
          "lib/netstandard1.3/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "fr"
          },
          "lib/netstandard1.3/it/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "it"
          },
          "lib/netstandard1.3/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "ja"
          },
          "lib/netstandard1.3/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "ko"
          },
          "lib/netstandard1.3/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "pl"
          },
          "lib/netstandard1.3/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "pt-BR"
          },
          "lib/netstandard1.3/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "ru"
          },
          "lib/netstandard1.3/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "tr"
          },
          "lib/netstandard1.3/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "zh-Hans"
          },
          "lib/netstandard1.3/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "zh-Hant"
          }
        }
      },
      "Microsoft.Diagnostics.NETCore.Client/0.2.61701": {
        "runtime": {
          "lib/netcoreapp2.1/Microsoft.Diagnostics.NETCore.Client.dll": {
            "assemblyVersion": "0.2.1.11701",
            "fileVersion": "0.2.1.11701"
          }
        }
      },
      "Microsoft.Diagnostics.Runtime/1.1.126102": {
        "runtime": {
          "lib/netstandard2.0/Microsoft.Diagnostics.Runtime.dll": {
            "assemblyVersion": "1.1.2.26102",
            "fileVersion": "1.1.2.26102"
          }
        }
      },
      "Microsoft.Diagnostics.Tracing.TraceEvent/2.0.61": {
        "dependencies": {
          "System.Runtime.CompilerServices.Unsafe": "4.5.2"
        },
        "runtime": {
          "lib/netstandard2.0/Dia2Lib.dll": {
            "assemblyVersion": "2.0.0.0",
            "fileVersion": "2.0.0.0"
          },
          "lib/netstandard2.0/Microsoft.Diagnostics.FastSerialization.dll": {
            "assemblyVersion": "1.0.0.0",
            "fileVersion": "1.0.0.0"
          },
          "lib/netstandard2.0/Microsoft.Diagnostics.Tracing.TraceEvent.dll": {
            "assemblyVersion": "2.0.61.0",
            "fileVersion": "2.0.61.0"
          },
          "lib/netstandard2.0/OSExtensions.dll": {
            "assemblyVersion": "1.0.0.0",
            "fileVersion": "1.0.0.0"
          },
          "lib/netstandard2.0/TraceReloggerLib.dll": {
            "assemblyVersion": "0.0.0.0",
            "fileVersion": "0.0.0.0"
          }
        }
      },
      "Microsoft.NETCore.Platforms/1.1.0": {},
      "Microsoft.NETCore.Targets/1.1.0": {},
      "Perfolizer/0.2.1": {
        "dependencies": {
          "System.Memory": "4.5.3"
        },
        "runtime": {
          "lib/netstandard2.0/Perfolizer.dll": {
            "assemblyVersion": "0.2.1.0",
            "fileVersion": "0.2.1.0"
          }
        }
      },
      "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
      "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
      "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
      "runtime.native.System/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0"
        }
      },
      "runtime.native.System.IO.Compression/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0"
        }
      },
      "runtime.native.System.Net.Http/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0"
        }
      },
      "runtime.native.System.Security.Cryptography.Apple/4.3.0": {
        "dependencies": {
          "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0"
        }
      },
      "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
        "dependencies": {
          "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
          "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
          "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
          "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
          "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
          "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
          "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
          "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
          "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
          "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
        }
      },
      "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
      "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
      "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {},
      "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
      "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
      "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
      "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
      "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
      "System.AppContext/4.3.0": {
        "dependencies": {
          "System.Runtime": "4.3.0"
        }
      },
      "System.Buffers/4.3.0": {
        "dependencies": {
          "System.Diagnostics.Debug": "4.3.0",
          "System.Diagnostics.Tracing": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Threading": "4.3.0"
        }
      },
      "System.CodeDom/6.0.0": {
        "runtime": {
          "lib/net6.0/System.CodeDom.dll": {
            "assemblyVersion": "6.0.0.0",
            "fileVersion": "6.0.21.52210"
          }
        }
      },
      "System.Collections/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Collections.Concurrent/4.3.0": {
        "dependencies": {
          "System.Collections": "4.3.0",
          "System.Diagnostics.Debug": "4.3.0",
          "System.Diagnostics.Tracing": "4.3.0",
          "System.Globalization": "4.3.0",
          "System.Reflection": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Threading": "4.3.0",
          "System.Threading.Tasks": "4.3.0"
        }
      },
      "System.Collections.Immutable/1.5.0": {},
      "System.Console/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.IO": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Text.Encoding": "4.3.0"
        }
      },
      "System.Diagnostics.Debug/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Diagnostics.FileVersionInfo/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "System.Globalization": "4.3.0",
          "System.IO": "4.3.0",
          "System.IO.FileSystem": "4.3.0",
          "System.IO.FileSystem.Primitives": "4.3.0",
          "System.Reflection.Metadata": "1.6.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Runtime.InteropServices": "4.3.0"
        }
      },
      "System.Diagnostics.StackTrace/4.3.0": {
        "dependencies": {
          "System.IO.FileSystem": "4.3.0",
          "System.Reflection": "4.3.0",
          "System.Reflection.Metadata": "1.6.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Diagnostics.Tools/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Diagnostics.Tracing/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Dynamic.Runtime/4.3.0": {
        "dependencies": {
          "System.Collections": "4.3.0",
          "System.Diagnostics.Debug": "4.3.0",
          "System.Linq": "4.3.0",
          "System.Linq.Expressions": "4.3.0",
          "System.ObjectModel": "4.3.0",
          "System.Reflection": "4.3.0",
          "System.Reflection.Emit": "4.7.0",
          "System.Reflection.Emit.ILGeneration": "4.3.0",
          "System.Reflection.Primitives": "4.3.0",
          "System.Reflection.TypeExtensions": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Threading": "4.3.0"
        }
      },
      "System.Globalization/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Globalization.Calendars/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Globalization": "4.3.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.IO/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Runtime": "4.3.0",
          "System.Text.Encoding": "4.3.0",
          "System.Threading.Tasks": "4.3.0"
        }
      },
      "System.IO.Compression/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "System.Buffers": "4.3.0",
          "System.Collections": "4.3.0",
          "System.Diagnostics.Debug": "4.3.0",
          "System.IO": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Runtime.Handles": "4.3.0",
          "System.Runtime.InteropServices": "4.3.0",
          "System.Text.Encoding": "4.3.0",
          "System.Threading": "4.3.0",
          "System.Threading.Tasks": "4.3.0",
          "runtime.native.System": "4.3.0",
          "runtime.native.System.IO.Compression": "4.3.0"
        }
      },
      "System.IO.FileSystem/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.IO": "4.3.0",
          "System.IO.FileSystem.Primitives": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Handles": "4.3.0",
          "System.Text.Encoding": "4.3.0",
          "System.Threading.Tasks": "4.3.0"
        }
      },
      "System.IO.FileSystem.Primitives/4.3.0": {
        "dependencies": {
          "System.Runtime": "4.3.0"
        }
      },
      "System.Linq/4.3.0": {
        "dependencies": {
          "System.Collections": "4.3.0",
          "System.Diagnostics.Debug": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0"
        }
      },
      "System.Linq.Expressions/4.3.0": {
        "dependencies": {
          "System.Collections": "4.3.0",
          "System.Diagnostics.Debug": "4.3.0",
          "System.Globalization": "4.3.0",
          "System.IO": "4.3.0",
          "System.Linq": "4.3.0",
          "System.ObjectModel": "4.3.0",
          "System.Reflection": "4.3.0",
          "System.Reflection.Emit": "4.7.0",
          "System.Reflection.Emit.ILGeneration": "4.3.0",
          "System.Reflection.Emit.Lightweight": "4.7.0",
          "System.Reflection.Extensions": "4.3.0",
          "System.Reflection.Primitives": "4.3.0",
          "System.Reflection.TypeExtensions": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Threading": "4.3.0"
        }
      },
      "System.Management/6.0.0": {
        "dependencies": {
          "System.CodeDom": "6.0.0"
        },
        "runtime": {
          "lib/net6.0/System.Management.dll": {
            "assemblyVersion": "4.0.0.0",
            "fileVersion": "6.0.21.52210"
          }
        },
        "runtimeTargets": {
          "runtimes/win/lib/net6.0/System.Management.dll": {
            "rid": "win",
            "assetType": "runtime",
            "assemblyVersion": "4.0.0.0",
            "fileVersion": "6.0.21.52210"
          }
        }
      },
      "System.Memory/4.5.3": {},
      "System.ObjectModel/4.3.0": {
        "dependencies": {
          "System.Collections": "4.3.0",
          "System.Diagnostics.Debug": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Threading": "4.3.0"
        }
      },
      "System.Reflection/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.IO": "4.3.0",
          "System.Reflection.Primitives": "4.3.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Reflection.Emit/4.7.0": {},
      "System.Reflection.Emit.ILGeneration/4.3.0": {
        "dependencies": {
          "System.Reflection": "4.3.0",
          "System.Reflection.Primitives": "4.3.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Reflection.Emit.Lightweight/4.7.0": {},
      "System.Reflection.Extensions/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Reflection": "4.3.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Reflection.Metadata/1.6.0": {},
      "System.Reflection.Primitives/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Reflection.TypeExtensions/4.3.0": {
        "dependencies": {
          "System.Reflection": "4.3.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Resources.ResourceManager/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Globalization": "4.3.0",
          "System.Reflection": "4.3.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Runtime/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0"
        }
      },
      "System.Runtime.CompilerServices.Unsafe/4.5.2": {},
      "System.Runtime.Extensions/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Runtime.Handles/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Runtime.InteropServices/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Reflection": "4.3.0",
          "System.Reflection.Primitives": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Handles": "4.3.0"
        }
      },
      "System.Runtime.Numerics/4.3.0": {
        "dependencies": {
          "System.Globalization": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0"
        }
      },
      "System.Security.Cryptography.Algorithms/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "System.Collections": "4.3.0",
          "System.IO": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Runtime.Handles": "4.3.0",
          "System.Runtime.InteropServices": "4.3.0",
          "System.Runtime.Numerics": "4.3.0",
          "System.Security.Cryptography.Encoding": "4.3.0",
          "System.Security.Cryptography.Primitives": "4.3.0",
          "System.Text.Encoding": "4.3.0",
          "runtime.native.System.Security.Cryptography.Apple": "4.3.0",
          "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
        }
      },
      "System.Security.Cryptography.Cng/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "System.IO": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Runtime.Handles": "4.3.0",
          "System.Runtime.InteropServices": "4.3.0",
          "System.Security.Cryptography.Algorithms": "4.3.0",
          "System.Security.Cryptography.Encoding": "4.3.0",
          "System.Security.Cryptography.Primitives": "4.3.0",
          "System.Text.Encoding": "4.3.0"
        }
      },
      "System.Security.Cryptography.Csp/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "System.IO": "4.3.0",
          "System.Reflection": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Runtime.Handles": "4.3.0",
          "System.Runtime.InteropServices": "4.3.0",
          "System.Security.Cryptography.Algorithms": "4.3.0",
          "System.Security.Cryptography.Encoding": "4.3.0",
          "System.Security.Cryptography.Primitives": "4.3.0",
          "System.Text.Encoding": "4.3.0",
          "System.Threading": "4.3.0"
        }
      },
      "System.Security.Cryptography.Encoding/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "System.Collections": "4.3.0",
          "System.Collections.Concurrent": "4.3.0",
          "System.Linq": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Runtime.Handles": "4.3.0",
          "System.Runtime.InteropServices": "4.3.0",
          "System.Security.Cryptography.Primitives": "4.3.0",
          "System.Text.Encoding": "4.3.0",
          "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
        }
      },
      "System.Security.Cryptography.OpenSsl/4.3.0": {
        "dependencies": {
          "System.Collections": "4.3.0",
          "System.IO": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Runtime.Handles": "4.3.0",
          "System.Runtime.InteropServices": "4.3.0",
          "System.Runtime.Numerics": "4.3.0",
          "System.Security.Cryptography.Algorithms": "4.3.0",
          "System.Security.Cryptography.Encoding": "4.3.0",
          "System.Security.Cryptography.Primitives": "4.3.0",
          "System.Text.Encoding": "4.3.0",
          "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
        }
      },
      "System.Security.Cryptography.Primitives/4.3.0": {
        "dependencies": {
          "System.Diagnostics.Debug": "4.3.0",
          "System.Globalization": "4.3.0",
          "System.IO": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Threading": "4.3.0",
          "System.Threading.Tasks": "4.3.0"
        }
      },
      "System.Security.Cryptography.X509Certificates/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "System.Collections": "4.3.0",
          "System.Diagnostics.Debug": "4.3.0",
          "System.Globalization": "4.3.0",
          "System.Globalization.Calendars": "4.3.0",
          "System.IO": "4.3.0",
          "System.IO.FileSystem": "4.3.0",
          "System.IO.FileSystem.Primitives": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Runtime.Handles": "4.3.0",
          "System.Runtime.InteropServices": "4.3.0",
          "System.Runtime.Numerics": "4.3.0",
          "System.Security.Cryptography.Algorithms": "4.3.0",
          "System.Security.Cryptography.Cng": "4.3.0",
          "System.Security.Cryptography.Csp": "4.3.0",
          "System.Security.Cryptography.Encoding": "4.3.0",
          "System.Security.Cryptography.OpenSsl": "4.3.0",
          "System.Security.Cryptography.Primitives": "4.3.0",
          "System.Text.Encoding": "4.3.0",
          "System.Threading": "4.3.0",
          "runtime.native.System": "4.3.0",
          "runtime.native.System.Net.Http": "4.3.0",
          "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
        }
      },
      "System.Text.Encoding/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Text.Encoding.CodePages/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "System.Collections": "4.3.0",
          "System.Globalization": "4.3.0",
          "System.IO": "4.3.0",
          "System.Reflection": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Runtime.Handles": "4.3.0",
          "System.Runtime.InteropServices": "4.3.0",
          "System.Text.Encoding": "4.3.0",
          "System.Threading": "4.3.0"
        }
      },
      "System.Text.Encoding.Extensions/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Runtime": "4.3.0",
          "System.Text.Encoding": "4.3.0"
        }
      },
      "System.Text.RegularExpressions/4.3.0": {
        "dependencies": {
          "System.Runtime": "4.3.0"
        }
      },
      "System.Threading/4.3.0": {
        "dependencies": {
          "System.Runtime": "4.3.0",
          "System.Threading.Tasks": "4.3.0"
        }
      },
      "System.Threading.Tasks/4.3.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "1.1.0",
          "Microsoft.NETCore.Targets": "1.1.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Threading.Tasks.Extensions/4.5.4": {},
      "System.Threading.Tasks.Parallel/4.3.0": {
        "dependencies": {
          "System.Collections.Concurrent": "4.3.0",
          "System.Diagnostics.Debug": "4.3.0",
          "System.Diagnostics.Tracing": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Threading": "4.3.0",
          "System.Threading.Tasks": "4.3.0"
        }
      },
      "System.Threading.Thread/4.3.0": {
        "dependencies": {
          "System.Runtime": "4.3.0"
        }
      },
      "System.ValueTuple/4.3.0": {
        "dependencies": {
          "System.Collections": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0"
        }
      },
      "System.Xml.ReaderWriter/4.3.0": {
        "dependencies": {
          "System.Collections": "4.3.0",
          "System.Diagnostics.Debug": "4.3.0",
          "System.Globalization": "4.3.0",
          "System.IO": "4.3.0",
          "System.IO.FileSystem": "4.3.0",
          "System.IO.FileSystem.Primitives": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Runtime.InteropServices": "4.3.0",
          "System.Text.Encoding": "4.3.0",
          "System.Text.Encoding.Extensions": "4.3.0",
          "System.Text.RegularExpressions": "4.3.0",
          "System.Threading.Tasks": "4.3.0",
          "System.Threading.Tasks.Extensions": "4.5.4"
        }
      },
      "System.Xml.XDocument/4.3.0": {
        "dependencies": {
          "System.Collections": "4.3.0",
          "System.Diagnostics.Debug": "4.3.0",
          "System.Diagnostics.Tools": "4.3.0",
          "System.Globalization": "4.3.0",
          "System.IO": "4.3.0",
          "System.Reflection": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Text.Encoding": "4.3.0",
          "System.Threading": "4.3.0",
          "System.Xml.ReaderWriter": "4.3.0"
        }
      },
      "System.Xml.XmlDocument/4.3.0": {
        "dependencies": {
          "System.Collections": "4.3.0",
          "System.Diagnostics.Debug": "4.3.0",
          "System.Globalization": "4.3.0",
          "System.IO": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Text.Encoding": "4.3.0",
          "System.Threading": "4.3.0",
          "System.Xml.ReaderWriter": "4.3.0"
        }
      },
      "System.Xml.XPath/4.3.0": {
        "dependencies": {
          "System.Collections": "4.3.0",
          "System.Diagnostics.Debug": "4.3.0",
          "System.Globalization": "4.3.0",
          "System.IO": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Threading": "4.3.0",
          "System.Xml.ReaderWriter": "4.3.0"
        }
      },
      "System.Xml.XPath.XDocument/4.3.0": {
        "dependencies": {
          "System.Diagnostics.Debug": "4.3.0",
          "System.Linq": "4.3.0",
          "System.Resources.ResourceManager": "4.3.0",
          "System.Runtime": "4.3.0",
          "System.Runtime.Extensions": "4.3.0",
          "System.Threading": "4.3.0",
          "System.Xml.ReaderWriter": "4.3.0",
          "System.Xml.XDocument": "4.3.0",
          "System.Xml.XPath": "4.3.0"
        }
      }
    }
  },
  "libraries": {
    "_BDN-2009/1.0.0": {
      "type": "project",
      "serviceable": false,
      "sha512": ""
    },
    "BenchmarkDotNet/0.13.1-develop": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-eAtxgrZ+QXWfK1BuIrxMQf0pp0BkhBphX+6QJ2EjtotvtEOh2PhgJmJn/Vv99xnsptrXX9SQx0cyit3YRB9maw==",
      "path": "benchmarkdotnet/0.13.1-develop",
      "hashPath": "benchmarkdotnet.0.13.1-develop.nupkg.sha512"
    },
    "BenchmarkDotNet.Annotations/0.13.1-develop": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-fVqXuugPL2uDluyHUEMXOUmAxNA0wFiIdgfB0KcxL3B02vxWnZioMB32SPtdpOkY/wbyAEFsApDYfidd/77Ugw==",
      "path": "benchmarkdotnet.annotations/0.13.1-develop",
      "hashPath": "benchmarkdotnet.annotations.0.13.1-develop.nupkg.sha512"
    },
    "CommandLineParser/2.4.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-U2FC9Y8NyIxxU6MpFFdWWu1xwiqz/61v/Doou7kmVjpeIEMLWyiNNkzNlSE84kyJ0O1LKApuEj5z48Ow0Hi4OQ==",
      "path": "commandlineparser/2.4.3",
      "hashPath": "commandlineparser.2.4.3.nupkg.sha512"
    },
    "Iced/1.8.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-KQqoTZg3wf+eqG8ztGqlz9TozC/Dw/jnN82JkIRGZXTg/by0aPiQIMGb+b7hvvkOLnmCuWr3Ghr0mA2I+ASX1A==",
      "path": "iced/1.8.0",
      "hashPath": "iced.1.8.0.nupkg.sha512"
    },
    "Microsoft.CodeAnalysis.Analyzers/2.6.1": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-VsT6gg2SPeToP8SK7PEcsH6Ftryb7aOqnXh9xg11zBeov05+63gP3k/TvrR+v85XIa8Nn0y3+qNl4M+qzNLBfw==",
      "path": "microsoft.codeanalysis.analyzers/2.6.1",
      "hashPath": "microsoft.codeanalysis.analyzers.2.6.1.nupkg.sha512"
    },
    "Microsoft.CodeAnalysis.Common/2.10.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-w57ebW3QIRFPoFFX6GCa6eF2FmuHYaWEJ/sMMHq+PBnHB51dEzLIoAQft1Byqe5nrSo4UUV6v4tad8fkTrKl8w==",
      "path": "microsoft.codeanalysis.common/2.10.0",
      "hashPath": "microsoft.codeanalysis.common.2.10.0.nupkg.sha512"
    },
    "Microsoft.CodeAnalysis.CSharp/2.10.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-bTr6j4V7G4ZPhRDUdowdtbEvXsQA4w1TYfOtXiYdv8TF7STl9ShOKtlSVzAusmeEWsZksJm9D1VSxt6XIyNB0w==",
      "path": "microsoft.codeanalysis.csharp/2.10.0",
      "hashPath": "microsoft.codeanalysis.csharp.2.10.0.nupkg.sha512"
    },
    "Microsoft.Diagnostics.NETCore.Client/0.2.61701": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-/whUqXLkTiUvG+vfSFd77DHHsLZW2HztZt+ACOpuvGyLKoGGN86M8cR1aYfRW6fxXF3SVGMKMswcL485SQEDuQ==",
      "path": "microsoft.diagnostics.netcore.client/0.2.61701",
      "hashPath": "microsoft.diagnostics.netcore.client.0.2.61701.nupkg.sha512"
    },
    "Microsoft.Diagnostics.Runtime/1.1.126102": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-2lyoyld8bd/zSq5HJPkyXVtsSdfS30qr75V96S4nEJ/nUiUp0WfGjxnTcZXBLCqzwE0DLUR0lUcNpMp0gEtuzA==",
      "path": "microsoft.diagnostics.runtime/1.1.126102",
      "hashPath": "microsoft.diagnostics.runtime.1.1.126102.nupkg.sha512"
    },
    "Microsoft.Diagnostics.Tracing.TraceEvent/2.0.61": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-czZJRJZEZbGyBauIXYfWIfVV6Nx88L55RARKmEb7ja+nmb1yI+LiROgnD1N0Fyh/RnzvUUD/J0YYMkAEBT1Z6w==",
      "path": "microsoft.diagnostics.tracing.traceevent/2.0.61",
      "hashPath": "microsoft.diagnostics.tracing.traceevent.2.0.61.nupkg.sha512"
    },
    "Microsoft.NETCore.Platforms/1.1.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
      "path": "microsoft.netcore.platforms/1.1.0",
      "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512"
    },
    "Microsoft.NETCore.Targets/1.1.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==",
      "path": "microsoft.netcore.targets/1.1.0",
      "hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512"
    },
    "Perfolizer/0.2.1": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-Dt4aCxCT8NPtWBKA8k+FsN/RezOQ2C6omNGm5o/qmYRiIwlQYF93UgFmeF1ezVNsztTnkg7P5P63AE+uNkLfrw==",
      "path": "perfolizer/0.2.1",
      "hashPath": "perfolizer.0.2.1.nupkg.sha512"
    },
    "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==",
      "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
      "hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
    },
    "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==",
      "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
      "hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
    },
    "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==",
      "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
      "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
    },
    "runtime.native.System/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==",
      "path": "runtime.native.system/4.3.0",
      "hashPath": "runtime.native.system.4.3.0.nupkg.sha512"
    },
    "runtime.native.System.IO.Compression/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==",
      "path": "runtime.native.system.io.compression/4.3.0",
      "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512"
    },
    "runtime.native.System.Net.Http/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==",
      "path": "runtime.native.system.net.http/4.3.0",
      "hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512"
    },
    "runtime.native.System.Security.Cryptography.Apple/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==",
      "path": "runtime.native.system.security.cryptography.apple/4.3.0",
      "hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512"
    },
    "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==",
      "path": "runtime.native.system.security.cryptography.openssl/4.3.0",
      "hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
    },
    "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==",
      "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
      "hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
    },
    "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==",
      "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
      "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
    },
    "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==",
      "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0",
      "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512"
    },
    "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==",
      "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
      "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
    },
    "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==",
      "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
      "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
    },
    "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==",
      "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
      "hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
    },
    "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==",
      "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
      "hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
    },
    "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==",
      "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
      "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
    },
    "System.AppContext/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==",
      "path": "system.appcontext/4.3.0",
      "hashPath": "system.appcontext.4.3.0.nupkg.sha512"
    },
    "System.Buffers/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==",
      "path": "system.buffers/4.3.0",
      "hashPath": "system.buffers.4.3.0.nupkg.sha512"
    },
    "System.CodeDom/6.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==",
      "path": "system.codedom/6.0.0",
      "hashPath": "system.codedom.6.0.0.nupkg.sha512"
    },
    "System.Collections/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
      "path": "system.collections/4.3.0",
      "hashPath": "system.collections.4.3.0.nupkg.sha512"
    },
    "System.Collections.Concurrent/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==",
      "path": "system.collections.concurrent/4.3.0",
      "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512"
    },
    "System.Collections.Immutable/1.5.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-EXKiDFsChZW0RjrZ4FYHu9aW6+P4MCgEDCklsVseRfhoO0F+dXeMSsMRAlVXIo06kGJ/zv+2w1a2uc2+kxxSaQ==",
      "path": "system.collections.immutable/1.5.0",
      "hashPath": "system.collections.immutable.1.5.0.nupkg.sha512"
    },
    "System.Console/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==",
      "path": "system.console/4.3.0",
      "hashPath": "system.console.4.3.0.nupkg.sha512"
    },
    "System.Diagnostics.Debug/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==",
      "path": "system.diagnostics.debug/4.3.0",
      "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512"
    },
    "System.Diagnostics.FileVersionInfo/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-omCF64wzQ3Q2CeIqkD6lmmxeMZtGHUmzgFMPjfVaOsyqpR66p/JaZzManMw1s33osoAb5gqpncsjie67+yUPHQ==",
      "path": "system.diagnostics.fileversioninfo/4.3.0",
      "hashPath": "system.diagnostics.fileversioninfo.4.3.0.nupkg.sha512"
    },
    "System.Diagnostics.StackTrace/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-BiHg0vgtd35/DM9jvtaC1eKRpWZxr0gcQd643ABG7GnvSlf5pOkY2uyd42mMOJoOmKvnpNj0F4tuoS1pacTwYw==",
      "path": "system.diagnostics.stacktrace/4.3.0",
      "hashPath": "system.diagnostics.stacktrace.4.3.0.nupkg.sha512"
    },
    "System.Diagnostics.Tools/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==",
      "path": "system.diagnostics.tools/4.3.0",
      "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512"
    },
    "System.Diagnostics.Tracing/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==",
      "path": "system.diagnostics.tracing/4.3.0",
      "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512"
    },
    "System.Dynamic.Runtime/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-SNVi1E/vfWUAs/WYKhE9+qlS6KqK0YVhnlT0HQtr8pMIA8YX3lwy3uPMownDwdYISBdmAF/2holEIldVp85Wag==",
      "path": "system.dynamic.runtime/4.3.0",
      "hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512"
    },
    "System.Globalization/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
      "path": "system.globalization/4.3.0",
      "hashPath": "system.globalization.4.3.0.nupkg.sha512"
    },
    "System.Globalization.Calendars/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==",
      "path": "system.globalization.calendars/4.3.0",
      "hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512"
    },
    "System.IO/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
      "path": "system.io/4.3.0",
      "hashPath": "system.io.4.3.0.nupkg.sha512"
    },
    "System.IO.Compression/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==",
      "path": "system.io.compression/4.3.0",
      "hashPath": "system.io.compression.4.3.0.nupkg.sha512"
    },
    "System.IO.FileSystem/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==",
      "path": "system.io.filesystem/4.3.0",
      "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512"
    },
    "System.IO.FileSystem.Primitives/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==",
      "path": "system.io.filesystem.primitives/4.3.0",
      "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512"
    },
    "System.Linq/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==",
      "path": "system.linq/4.3.0",
      "hashPath": "system.linq.4.3.0.nupkg.sha512"
    },
    "System.Linq.Expressions/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==",
      "path": "system.linq.expressions/4.3.0",
      "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512"
    },
    "System.Management/6.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-sHsESYMmPDhQuOC66h6AEOs/XowzKsbT9srMbX71TCXP58hkpn1BqBjdmKj1+DCA/WlBETX1K5WjQHwmV0Txrg==",
      "path": "system.management/6.0.0",
      "hashPath": "system.management.6.0.0.nupkg.sha512"
    },
    "System.Memory/4.5.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==",
      "path": "system.memory/4.5.3",
      "hashPath": "system.memory.4.5.3.nupkg.sha512"
    },
    "System.ObjectModel/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==",
      "path": "system.objectmodel/4.3.0",
      "hashPath": "system.objectmodel.4.3.0.nupkg.sha512"
    },
    "System.Reflection/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
      "path": "system.reflection/4.3.0",
      "hashPath": "system.reflection.4.3.0.nupkg.sha512"
    },
    "System.Reflection.Emit/4.7.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ==",
      "path": "system.reflection.emit/4.7.0",
      "hashPath": "system.reflection.emit.4.7.0.nupkg.sha512"
    },
    "System.Reflection.Emit.ILGeneration/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==",
      "path": "system.reflection.emit.ilgeneration/4.3.0",
      "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512"
    },
    "System.Reflection.Emit.Lightweight/4.7.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-a4OLB4IITxAXJeV74MDx49Oq2+PsF6Sml54XAFv+2RyWwtDBcabzoxiiJRhdhx+gaohLh4hEGCLQyBozXoQPqA==",
      "path": "system.reflection.emit.lightweight/4.7.0",
      "hashPath": "system.reflection.emit.lightweight.4.7.0.nupkg.sha512"
    },
    "System.Reflection.Extensions/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==",
      "path": "system.reflection.extensions/4.3.0",
      "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512"
    },
    "System.Reflection.Metadata/1.6.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==",
      "path": "system.reflection.metadata/1.6.0",
      "hashPath": "system.reflection.metadata.1.6.0.nupkg.sha512"
    },
    "System.Reflection.Primitives/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
      "path": "system.reflection.primitives/4.3.0",
      "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512"
    },
    "System.Reflection.TypeExtensions/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==",
      "path": "system.reflection.typeextensions/4.3.0",
      "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512"
    },
    "System.Resources.ResourceManager/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
      "path": "system.resources.resourcemanager/4.3.0",
      "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512"
    },
    "System.Runtime/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
      "path": "system.runtime/4.3.0",
      "hashPath": "system.runtime.4.3.0.nupkg.sha512"
    },
    "System.Runtime.CompilerServices.Unsafe/4.5.2": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-wprSFgext8cwqymChhrBLu62LMg/1u92bU+VOwyfBimSPVFXtsNqEWC92Pf9ofzJFlk4IHmJA75EDJn1b2goAQ==",
      "path": "system.runtime.compilerservices.unsafe/4.5.2",
      "hashPath": "system.runtime.compilerservices.unsafe.4.5.2.nupkg.sha512"
    },
    "System.Runtime.Extensions/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
      "path": "system.runtime.extensions/4.3.0",
      "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512"
    },
    "System.Runtime.Handles/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==",
      "path": "system.runtime.handles/4.3.0",
      "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512"
    },
    "System.Runtime.InteropServices/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==",
      "path": "system.runtime.interopservices/4.3.0",
      "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512"
    },
    "System.Runtime.Numerics/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==",
      "path": "system.runtime.numerics/4.3.0",
      "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512"
    },
    "System.Security.Cryptography.Algorithms/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==",
      "path": "system.security.cryptography.algorithms/4.3.0",
      "hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512"
    },
    "System.Security.Cryptography.Cng/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==",
      "path": "system.security.cryptography.cng/4.3.0",
      "hashPath": "system.security.cryptography.cng.4.3.0.nupkg.sha512"
    },
    "System.Security.Cryptography.Csp/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==",
      "path": "system.security.cryptography.csp/4.3.0",
      "hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512"
    },
    "System.Security.Cryptography.Encoding/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==",
      "path": "system.security.cryptography.encoding/4.3.0",
      "hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512"
    },
    "System.Security.Cryptography.OpenSsl/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==",
      "path": "system.security.cryptography.openssl/4.3.0",
      "hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512"
    },
    "System.Security.Cryptography.Primitives/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==",
      "path": "system.security.cryptography.primitives/4.3.0",
      "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512"
    },
    "System.Security.Cryptography.X509Certificates/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==",
      "path": "system.security.cryptography.x509certificates/4.3.0",
      "hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512"
    },
    "System.Text.Encoding/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
      "path": "system.text.encoding/4.3.0",
      "hashPath": "system.text.encoding.4.3.0.nupkg.sha512"
    },
    "System.Text.Encoding.CodePages/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-IRiEFUa5b/Gs5Egg8oqBVoywhtOeaO2KOx3j0RfcYY/raxqBuEK7NXRDgOwtYM8qbi+7S4RPXUbNt+ZxyY0/NQ==",
      "path": "system.text.encoding.codepages/4.3.0",
      "hashPath": "system.text.encoding.codepages.4.3.0.nupkg.sha512"
    },
    "System.Text.Encoding.Extensions/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==",
      "path": "system.text.encoding.extensions/4.3.0",
      "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512"
    },
    "System.Text.RegularExpressions/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==",
      "path": "system.text.regularexpressions/4.3.0",
      "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512"
    },
    "System.Threading/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==",
      "path": "system.threading/4.3.0",
      "hashPath": "system.threading.4.3.0.nupkg.sha512"
    },
    "System.Threading.Tasks/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
      "path": "system.threading.tasks/4.3.0",
      "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512"
    },
    "System.Threading.Tasks.Extensions/4.5.4": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
      "path": "system.threading.tasks.extensions/4.5.4",
      "hashPath": "system.threading.tasks.extensions.4.5.4.nupkg.sha512"
    },
    "System.Threading.Tasks.Parallel/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-cbjBNZHf/vQCfcdhzx7knsiygoCKgxL8mZOeocXZn5gWhCdzHIq6bYNKWX0LAJCWYP7bds4yBK8p06YkP0oa0g==",
      "path": "system.threading.tasks.parallel/4.3.0",
      "hashPath": "system.threading.tasks.parallel.4.3.0.nupkg.sha512"
    },
    "System.Threading.Thread/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-OHmbT+Zz065NKII/ZHcH9XO1dEuLGI1L2k7uYss+9C1jLxTC9kTZZuzUOyXHayRk+dft9CiDf3I/QZ0t8JKyBQ==",
      "path": "system.threading.thread/4.3.0",
      "hashPath": "system.threading.thread.4.3.0.nupkg.sha512"
    },
    "System.ValueTuple/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-cNLEvBX3d6MMQRZe3SMFNukVbitDAEpVZO17qa0/2FHxZ7Y7PpFRpr6m2615XYM/tYYYf0B+WyHNujqIw8Luwg==",
      "path": "system.valuetuple/4.3.0",
      "hashPath": "system.valuetuple.4.3.0.nupkg.sha512"
    },
    "System.Xml.ReaderWriter/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==",
      "path": "system.xml.readerwriter/4.3.0",
      "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512"
    },
    "System.Xml.XDocument/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==",
      "path": "system.xml.xdocument/4.3.0",
      "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512"
    },
    "System.Xml.XmlDocument/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-lJ8AxvkX7GQxpC6GFCeBj8ThYVyQczx2+f/cWHJU8tjS7YfI6Cv6bon70jVEgs2CiFbmmM8b9j1oZVx0dSI2Ww==",
      "path": "system.xml.xmldocument/4.3.0",
      "hashPath": "system.xml.xmldocument.4.3.0.nupkg.sha512"
    },
    "System.Xml.XPath/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-v1JQ5SETnQusqmS3RwStF7vwQ3L02imIzl++sewmt23VGygix04pEH+FCj1yWb+z4GDzKiljr1W7Wfvrx0YwgA==",
      "path": "system.xml.xpath/4.3.0",
      "hashPath": "system.xml.xpath.4.3.0.nupkg.sha512"
    },
    "System.Xml.XPath.XDocument/4.3.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-jw9oHHEIVW53mHY9PgrQa98Xo2IZ0ZjrpdOTmtvk+Rvg4tq7dydmxdNqUvJ5YwjDqhn75mBXWttWjiKhWP53LQ==",
      "path": "system.xml.xpath.xdocument/4.3.0",
      "hashPath": "system.xml.xpath.xdocument.4.3.0.nupkg.sha512"
    }
  }
}

Update Microsoft.CodeAnalysis.CSharp to 3.0.0 to use a version that targets netstandard2.0.
@martincostello
Copy link
Member Author

And the same with Microsoft.CodeAnalysis.CSharp updated to 3.0.0.

{
  "runtimeTarget": {
    "name": ".NETCoreApp,Version=v6.0",
    "signature": ""
  },
  "compilationOptions": {},
  "targets": {
    ".NETCoreApp,Version=v6.0": {
      "_BDN-2009/1.0.0": {
        "dependencies": {
          "BenchmarkDotNet": "0.13.1-develop"
        },
        "runtime": {
          "_BDN-2009.dll": {}
        }
      },
      "BenchmarkDotNet/0.13.1-develop": {
        "dependencies": {
          "BenchmarkDotNet.Annotations": "0.13.1-develop",
          "CommandLineParser": "2.4.3",
          "Iced": "1.8.0",
          "Microsoft.CodeAnalysis.CSharp": "3.0.0",
          "Microsoft.Diagnostics.NETCore.Client": "0.2.61701",
          "Microsoft.Diagnostics.Runtime": "1.1.126102",
          "Microsoft.Diagnostics.Tracing.TraceEvent": "2.0.61",
          "Perfolizer": "0.2.1",
          "System.Management": "6.0.0",
          "System.Reflection.Emit": "4.7.0",
          "System.Reflection.Emit.Lightweight": "4.7.0",
          "System.Threading.Tasks.Extensions": "4.5.4"
        },
        "runtime": {
          "lib/net6.0/BenchmarkDotNet.dll": {
            "assemblyVersion": "0.13.1.0",
            "fileVersion": "0.13.1.0"
          }
        }
      },
      "BenchmarkDotNet.Annotations/0.13.1-develop": {
        "runtime": {
          "lib/netstandard2.0/BenchmarkDotNet.Annotations.dll": {
            "assemblyVersion": "0.13.1.0",
            "fileVersion": "0.13.1.0"
          }
        }
      },
      "CommandLineParser/2.4.3": {
        "runtime": {
          "lib/netstandard2.0/CommandLine.dll": {
            "assemblyVersion": "2.4.3.0",
            "fileVersion": "2.4.3.0"
          }
        }
      },
      "Iced/1.8.0": {
        "runtime": {
          "lib/netstandard2.1/Iced.dll": {
            "assemblyVersion": "1.8.0.0",
            "fileVersion": "1.8.0.0"
          }
        }
      },
      "Microsoft.CodeAnalysis.Analyzers/2.6.2-beta2": {},
      "Microsoft.CodeAnalysis.Common/3.0.0": {
        "dependencies": {
          "Microsoft.CodeAnalysis.Analyzers": "2.6.2-beta2",
          "System.Collections.Immutable": "1.5.0",
          "System.Memory": "4.5.3",
          "System.Reflection.Metadata": "1.6.0",
          "System.Runtime.CompilerServices.Unsafe": "4.5.2",
          "System.Text.Encoding.CodePages": "4.5.0",
          "System.Threading.Tasks.Extensions": "4.5.4"
        },
        "runtime": {
          "lib/netstandard2.0/Microsoft.CodeAnalysis.dll": {
            "assemblyVersion": "3.0.0.0",
            "fileVersion": "3.0.19.17001"
          }
        },
        "resources": {
          "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "cs"
          },
          "lib/netstandard2.0/de/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "de"
          },
          "lib/netstandard2.0/es/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "es"
          },
          "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "fr"
          },
          "lib/netstandard2.0/it/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "it"
          },
          "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "ja"
          },
          "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "ko"
          },
          "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "pl"
          },
          "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "pt-BR"
          },
          "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "ru"
          },
          "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "tr"
          },
          "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "zh-Hans"
          },
          "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll": {
            "locale": "zh-Hant"
          }
        }
      },
      "Microsoft.CodeAnalysis.CSharp/3.0.0": {
        "dependencies": {
          "Microsoft.CodeAnalysis.Common": "3.0.0"
        },
        "runtime": {
          "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.dll": {
            "assemblyVersion": "3.0.0.0",
            "fileVersion": "3.0.19.17001"
          }
        },
        "resources": {
          "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "cs"
          },
          "lib/netstandard2.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "de"
          },
          "lib/netstandard2.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "es"
          },
          "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "fr"
          },
          "lib/netstandard2.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "it"
          },
          "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "ja"
          },
          "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "ko"
          },
          "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "pl"
          },
          "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "pt-BR"
          },
          "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "ru"
          },
          "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "tr"
          },
          "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "zh-Hans"
          },
          "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": {
            "locale": "zh-Hant"
          }
        }
      },
      "Microsoft.Diagnostics.NETCore.Client/0.2.61701": {
        "runtime": {
          "lib/netcoreapp2.1/Microsoft.Diagnostics.NETCore.Client.dll": {
            "assemblyVersion": "0.2.1.11701",
            "fileVersion": "0.2.1.11701"
          }
        }
      },
      "Microsoft.Diagnostics.Runtime/1.1.126102": {
        "runtime": {
          "lib/netstandard2.0/Microsoft.Diagnostics.Runtime.dll": {
            "assemblyVersion": "1.1.2.26102",
            "fileVersion": "1.1.2.26102"
          }
        }
      },
      "Microsoft.Diagnostics.Tracing.TraceEvent/2.0.61": {
        "dependencies": {
          "System.Runtime.CompilerServices.Unsafe": "4.5.2"
        },
        "runtime": {
          "lib/netstandard2.0/Dia2Lib.dll": {
            "assemblyVersion": "2.0.0.0",
            "fileVersion": "2.0.0.0"
          },
          "lib/netstandard2.0/Microsoft.Diagnostics.FastSerialization.dll": {
            "assemblyVersion": "1.0.0.0",
            "fileVersion": "1.0.0.0"
          },
          "lib/netstandard2.0/Microsoft.Diagnostics.Tracing.TraceEvent.dll": {
            "assemblyVersion": "2.0.61.0",
            "fileVersion": "2.0.61.0"
          },
          "lib/netstandard2.0/OSExtensions.dll": {
            "assemblyVersion": "1.0.0.0",
            "fileVersion": "1.0.0.0"
          },
          "lib/netstandard2.0/TraceReloggerLib.dll": {
            "assemblyVersion": "0.0.0.0",
            "fileVersion": "0.0.0.0"
          }
        }
      },
      "Microsoft.NETCore.Platforms/2.0.0": {},
      "Perfolizer/0.2.1": {
        "dependencies": {
          "System.Memory": "4.5.3"
        },
        "runtime": {
          "lib/netstandard2.0/Perfolizer.dll": {
            "assemblyVersion": "0.2.1.0",
            "fileVersion": "0.2.1.0"
          }
        }
      },
      "System.CodeDom/6.0.0": {
        "runtime": {
          "lib/net6.0/System.CodeDom.dll": {
            "assemblyVersion": "6.0.0.0",
            "fileVersion": "6.0.21.52210"
          }
        }
      },
      "System.Collections.Immutable/1.5.0": {},
      "System.Management/6.0.0": {
        "dependencies": {
          "System.CodeDom": "6.0.0"
        },
        "runtime": {
          "lib/net6.0/System.Management.dll": {
            "assemblyVersion": "4.0.0.0",
            "fileVersion": "6.0.21.52210"
          }
        },
        "runtimeTargets": {
          "runtimes/win/lib/net6.0/System.Management.dll": {
            "rid": "win",
            "assetType": "runtime",
            "assemblyVersion": "4.0.0.0",
            "fileVersion": "6.0.21.52210"
          }
        }
      },
      "System.Memory/4.5.3": {},
      "System.Reflection.Emit/4.7.0": {},
      "System.Reflection.Emit.Lightweight/4.7.0": {},
      "System.Reflection.Metadata/1.6.0": {},
      "System.Runtime.CompilerServices.Unsafe/4.5.2": {},
      "System.Text.Encoding.CodePages/4.5.0": {
        "dependencies": {
          "Microsoft.NETCore.Platforms": "2.0.0",
          "System.Runtime.CompilerServices.Unsafe": "4.5.2"
        }
      },
      "System.Threading.Tasks.Extensions/4.5.4": {}
    }
  },
  "libraries": {
    "_BDN-2009/1.0.0": {
      "type": "project",
      "serviceable": false,
      "sha512": ""
    },
    "BenchmarkDotNet/0.13.1-develop": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-MIHvmNYnWBlmoBd5tXxpbSjwA+jcM08HLWMtAQJkLricXjYQUXhhIh0k0RJqsBclDVhtqR9R1bX8wZPys7fsbA==",
      "path": "benchmarkdotnet/0.13.1-develop",
      "hashPath": "benchmarkdotnet.0.13.1-develop.nupkg.sha512"
    },
    "BenchmarkDotNet.Annotations/0.13.1-develop": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-AORzd5eRRRL8CV3HcwLRP2ibmsqbz+oMZTyNDqpgLjUPlQJuk0ZLZFs0WBxExVnsZv8HTGmQ1guRNnRIh4VjKw==",
      "path": "benchmarkdotnet.annotations/0.13.1-develop",
      "hashPath": "benchmarkdotnet.annotations.0.13.1-develop.nupkg.sha512"
    },
    "CommandLineParser/2.4.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-U2FC9Y8NyIxxU6MpFFdWWu1xwiqz/61v/Doou7kmVjpeIEMLWyiNNkzNlSE84kyJ0O1LKApuEj5z48Ow0Hi4OQ==",
      "path": "commandlineparser/2.4.3",
      "hashPath": "commandlineparser.2.4.3.nupkg.sha512"
    },
    "Iced/1.8.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-KQqoTZg3wf+eqG8ztGqlz9TozC/Dw/jnN82JkIRGZXTg/by0aPiQIMGb+b7hvvkOLnmCuWr3Ghr0mA2I+ASX1A==",
      "path": "iced/1.8.0",
      "hashPath": "iced.1.8.0.nupkg.sha512"
    },
    "Microsoft.CodeAnalysis.Analyzers/2.6.2-beta2": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-rg5Ql73AmGCMG5Q40Kzbndq7C7S4XvsJA+2QXfZBCy2dRqD+a7BSbx/3942EoRUJ/8Wh9+kLg2G2qC46o3f1Aw==",
      "path": "microsoft.codeanalysis.analyzers/2.6.2-beta2",
      "hashPath": "microsoft.codeanalysis.analyzers.2.6.2-beta2.nupkg.sha512"
    },
    "Microsoft.CodeAnalysis.Common/3.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-HEnLZ9Op5IoXeuokhfSLIXstXfEyPzXhQ/xsnvUmxzb+7YpwuLk57txArzGs/Wne5bWmU7Uey4Q1jUZ3++heqg==",
      "path": "microsoft.codeanalysis.common/3.0.0",
      "hashPath": "microsoft.codeanalysis.common.3.0.0.nupkg.sha512"
    },
    "Microsoft.CodeAnalysis.CSharp/3.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-hWFUxc0iUbVvIKWJODErOeOa5GiqZuEcetxaCfHqZ04zHy0ZCLx3v4/TdF/6Erx1mXPHfoT2Tiz5rZCQZ6OyxQ==",
      "path": "microsoft.codeanalysis.csharp/3.0.0",
      "hashPath": "microsoft.codeanalysis.csharp.3.0.0.nupkg.sha512"
    },
    "Microsoft.Diagnostics.NETCore.Client/0.2.61701": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-/whUqXLkTiUvG+vfSFd77DHHsLZW2HztZt+ACOpuvGyLKoGGN86M8cR1aYfRW6fxXF3SVGMKMswcL485SQEDuQ==",
      "path": "microsoft.diagnostics.netcore.client/0.2.61701",
      "hashPath": "microsoft.diagnostics.netcore.client.0.2.61701.nupkg.sha512"
    },
    "Microsoft.Diagnostics.Runtime/1.1.126102": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-2lyoyld8bd/zSq5HJPkyXVtsSdfS30qr75V96S4nEJ/nUiUp0WfGjxnTcZXBLCqzwE0DLUR0lUcNpMp0gEtuzA==",
      "path": "microsoft.diagnostics.runtime/1.1.126102",
      "hashPath": "microsoft.diagnostics.runtime.1.1.126102.nupkg.sha512"
    },
    "Microsoft.Diagnostics.Tracing.TraceEvent/2.0.61": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-czZJRJZEZbGyBauIXYfWIfVV6Nx88L55RARKmEb7ja+nmb1yI+LiROgnD1N0Fyh/RnzvUUD/J0YYMkAEBT1Z6w==",
      "path": "microsoft.diagnostics.tracing.traceevent/2.0.61",
      "hashPath": "microsoft.diagnostics.tracing.traceevent.2.0.61.nupkg.sha512"
    },
    "Microsoft.NETCore.Platforms/2.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-VdLJOCXhZaEMY7Hm2GKiULmn7IEPFE4XC5LPSfBVCUIA8YLZVh846gtfBJalsPQF2PlzdD7ecX7DZEulJ402ZQ==",
      "path": "microsoft.netcore.platforms/2.0.0",
      "hashPath": "microsoft.netcore.platforms.2.0.0.nupkg.sha512"
    },
    "Perfolizer/0.2.1": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-Dt4aCxCT8NPtWBKA8k+FsN/RezOQ2C6omNGm5o/qmYRiIwlQYF93UgFmeF1ezVNsztTnkg7P5P63AE+uNkLfrw==",
      "path": "perfolizer/0.2.1",
      "hashPath": "perfolizer.0.2.1.nupkg.sha512"
    },
    "System.CodeDom/6.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==",
      "path": "system.codedom/6.0.0",
      "hashPath": "system.codedom.6.0.0.nupkg.sha512"
    },
    "System.Collections.Immutable/1.5.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-EXKiDFsChZW0RjrZ4FYHu9aW6+P4MCgEDCklsVseRfhoO0F+dXeMSsMRAlVXIo06kGJ/zv+2w1a2uc2+kxxSaQ==",
      "path": "system.collections.immutable/1.5.0",
      "hashPath": "system.collections.immutable.1.5.0.nupkg.sha512"
    },
    "System.Management/6.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-sHsESYMmPDhQuOC66h6AEOs/XowzKsbT9srMbX71TCXP58hkpn1BqBjdmKj1+DCA/WlBETX1K5WjQHwmV0Txrg==",
      "path": "system.management/6.0.0",
      "hashPath": "system.management.6.0.0.nupkg.sha512"
    },
    "System.Memory/4.5.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==",
      "path": "system.memory/4.5.3",
      "hashPath": "system.memory.4.5.3.nupkg.sha512"
    },
    "System.Reflection.Emit/4.7.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ==",
      "path": "system.reflection.emit/4.7.0",
      "hashPath": "system.reflection.emit.4.7.0.nupkg.sha512"
    },
    "System.Reflection.Emit.Lightweight/4.7.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-a4OLB4IITxAXJeV74MDx49Oq2+PsF6Sml54XAFv+2RyWwtDBcabzoxiiJRhdhx+gaohLh4hEGCLQyBozXoQPqA==",
      "path": "system.reflection.emit.lightweight/4.7.0",
      "hashPath": "system.reflection.emit.lightweight.4.7.0.nupkg.sha512"
    },
    "System.Reflection.Metadata/1.6.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==",
      "path": "system.reflection.metadata/1.6.0",
      "hashPath": "system.reflection.metadata.1.6.0.nupkg.sha512"
    },
    "System.Runtime.CompilerServices.Unsafe/4.5.2": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-wprSFgext8cwqymChhrBLu62LMg/1u92bU+VOwyfBimSPVFXtsNqEWC92Pf9ofzJFlk4IHmJA75EDJn1b2goAQ==",
      "path": "system.runtime.compilerservices.unsafe/4.5.2",
      "hashPath": "system.runtime.compilerservices.unsafe.4.5.2.nupkg.sha512"
    },
    "System.Text.Encoding.CodePages/4.5.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-S0wEUiKcLvRlkFUXca8uio1UQ5bYQzYgOmOKtCqaBQC3GR9AJjh43otcM32IGsAyvadFTaAMw9Irm6dS4Evfng==",
      "path": "system.text.encoding.codepages/4.5.0",
      "hashPath": "system.text.encoding.codepages.4.5.0.nupkg.sha512"
    },
    "System.Threading.Tasks.Extensions/4.5.4": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
      "path": "system.threading.tasks.extensions/4.5.4",
      "hashPath": "system.threading.tasks.extensions.4.5.4.nupkg.sha512"
    }
  }
}

@@ -67,10 +72,19 @@ private static bool IsAotMethod()

internal static string GetArchitecture() => GetCurrentPlatform().ToString();

#if NET6_0_OR_GREATER
[System.Runtime.Versioning.SupportedOSPlatformGuard("windows")]
#endif
internal static bool IsWindows() => IsOSPlatform(OSPlatform.Windows);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you change these methods to call OperatingSystem.Is*** on .NET 6+? Same with IsWasm above.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would those flow the platform compatibility annotations? I tried to touch as little existing code as possible, these hash defines are just fixing new compiler warnings for the net6.0 TFM.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No they wouldn't, but the check would be optimized by the JIT.

This (and the other review comment) is some low-hanging fruit we can address now that the library targets .NET 6. I understand if you want to leave it for another time and do here the minimum to reduce the dependency tree.

@@ -26,6 +28,9 @@ internal static class RuntimeInformation

public static bool IsMono { get; } = Type.GetType("Mono.Runtime") != null; // it allocates a lot of memory, we need to check it once in order to keep Engine non-allocating!

#if NET6_0_OR_GREATER
[System.Runtime.Versioning.SupportedOSPlatformGuard("windows")]
#endif
public static bool IsFullFramework => FrameworkDescription.StartsWith(".NET Framework", StringComparison.OrdinalIgnoreCase);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could be always false on .NET 6+. I'm not sure we can optimize other Is*** methods, so let's be careful.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, this was just to fix-up new compatibility warnings. How IsFullFramework is implemented being changed would be a separate concern to adding a new TFM?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah I see what you mean now. By definition, if it's NET6_0_OR_GREATER then the implementation is just return false; because it isn't .NET Framework.

Copy link
Member

@adamsitnik adamsitnik left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall it LGTM, but I still need to wrap my head around displaying a nice OS description.

big thanks @martincostello !

internal static bool IsLinux() => IsOSPlatform(OSPlatform.Linux);

#if NET6_0_OR_GREATER
[System.Runtime.Versioning.SupportedOSPlatformGuard("osx")]
#endif
internal static bool IsMacOSX() => IsOSPlatform(OSPlatform.OSX);

internal static bool IsAndroid() => Type.GetType("Java.Lang.Object, Mono.Android") != null;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these things still valid on net6.0? I think the assembly name changed for iOS for sure and maybe Android also has different things?

There is also the OperatingSystem.IsAndroid() that should be used on that.

<PackageReference Include="System.Management" Version="6.0.0" />
<PackageReference Include="System.Reflection.Emit" Version="4.7.0" />
<PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.7.0" />
<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

System.Threading.Tasks.Extensions can be moved under <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' "> since it's included in .Net 6, right?

@adamsitnik
Copy link
Member

If I take the PlatformApis code and condense it into the same class and use it like the below, then the same description is returned on my local machine for net48 and net6.0.

@martincostello Most likely some of our users can be depending on the way we currently display OS info (example: .NET Perf Team Reporting System) so we need to keep using exact same string(s). Please copy the code that you have referenced and include it in net6.0 build of BDN. I currently don't have a better idea on how to get exact same strings. As soon as you do that, I am going to merge this PR, test it and start working on releasing BDN 0.13.2! Once again, thank you!

@martincostello
Copy link
Member Author

Cool, thanks @adamsitnik - I'll get this updated today.

@adamsitnik adamsitnik added this to the v0.13.2 milestone Jul 15, 2022
@adamsitnik adamsitnik merged commit 762b76c into dotnet:master Jul 15, 2022
@martincostello martincostello deleted the clean-up-deps-2009 branch July 15, 2022 13:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
6 participants