

GROUP nuget
STRATEGY: MIN
RESTRICTION: || (== net462) (== net8.0) (== netstandard2.0)
NUGET
  remote: https://api.nuget.org/v3/index.json
    BenderProxy (1.1.2)
    Castle.Core (5.1.1)
      System.Diagnostics.EventLog (>= 4.7) - restriction: || (&& (== net462) (== net8.0)) (&& (== net462) (>= netstandard2.1)) (&& (== net8.0) (< net6.0)) (&& (== net8.0) (< netstandard2.1)) (== netstandard2.0)
      System.Diagnostics.EventLog (>= 6.0) - restriction: || (&& (== net462) (>= net6.0)) (== net8.0) (&& (== netstandard2.0) (>= net6.0))
      System.Reflection.Emit (>= 4.7) - restriction: || (&& (== net462) (== net8.0)) (&& (== net8.0) (< netstandard2.1)) (== netstandard2.0)
    CommandLineParser (2.8)
    Handlebars.Net (1.11.5)
      Microsoft.CSharp (>= 4.4) - restriction: || (&& (== net462) (< net452) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
      System.Reflection.TypeExtensions (>= 4.4) - restriction: || (&& (== net462) (< net452) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
    Humanizer.Core (2.8.26)
      NETStandard.Library (>= 1.6.1) - restriction: || (== net462) (&& (== net8.0) (< netstandard2.0))
    Microsoft.ApplicationInsights (2.23) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
      System.Diagnostics.DiagnosticSource (>= 5.0)
    Microsoft.Bcl.AsyncInterfaces (8.0) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (== netstandard2.0)
      System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< netstandard2.1)) (== netstandard2.0)
    Microsoft.CSharp (4.4) - restriction: || (&& (== net462) (< net452) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
    Microsoft.Extensions.DependencyInjection (3.1.9)
      Microsoft.Bcl.AsyncInterfaces (>= 1.1.1) - restriction: || (== net462) (&& (== net8.0) (>= net461)) (&& (== net8.0) (< netstandard2.1)) (== netstandard2.0)
      Microsoft.Extensions.DependencyInjection.Abstractions (>= 3.1.9)
    Microsoft.Extensions.DependencyInjection.Abstractions (3.1.9)
    Microsoft.Extensions.DependencyModel (8.0.2) - restriction: || (&& (== net462) (>= net8.0)) (== net8.0) (&& (== netstandard2.0) (>= net8.0))
    Microsoft.NETCore.Platforms (1.1)
    Microsoft.Testing.Extensions.Telemetry (2.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
      Microsoft.ApplicationInsights (>= 2.23) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
      Microsoft.Testing.Platform (>= 2.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
      System.Diagnostics.DiagnosticSource (>= 6.0) - restriction: || (&& (== net462) (== net8.0)) (&& (== net462) (>= netstandard2.0)) (== netstandard2.0)
    Microsoft.Testing.Extensions.TrxReport.Abstractions (2.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
      Microsoft.Testing.Platform (>= 2.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
    Microsoft.Testing.Extensions.VSTestBridge (2.1)
      Microsoft.Testing.Extensions.Telemetry (>= 2.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
      Microsoft.Testing.Extensions.TrxReport.Abstractions (>= 2.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
      Microsoft.Testing.Platform (>= 2.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
      Microsoft.TestPlatform.ObjectModel (>= 18.0.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
    Microsoft.Testing.Platform (2.1)
    Microsoft.Testing.Platform.MSBuild (2.1) - restriction: || (== net462) (== net8.0) (&& (== netstandard2.0) (>= net462)) (&& (== netstandard2.0) (>= net8.0))
      Microsoft.Testing.Platform (>= 2.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
    Microsoft.TestPlatform.ObjectModel (18.0.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
      System.Reflection.Metadata (>= 8.0)
    Moq (4.20.72)
      Castle.Core (>= 5.1.1)
      System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< netstandard2.1)) (== netstandard2.0)
    NETStandard.Library (2.0.3)
      Microsoft.NETCore.Platforms (>= 1.1)
    NUnit (4.6)
      System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== netstandard2.0) (>= net462))
      System.ValueTuple (>= 4.4) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== netstandard2.0) (>= net462))
    NUnit.Analyzers (4.13)
    NUnit3TestAdapter (6.2)
      Microsoft.Extensions.DependencyModel (>= 8.0.2) - restriction: || (&& (== net462) (>= net8.0)) (== net8.0) (&& (== netstandard2.0) (>= net8.0))
      Microsoft.Testing.Extensions.VSTestBridge (>= 2.1) - restriction: || (== net462) (== net8.0) (&& (== netstandard2.0) (>= net462)) (&& (== netstandard2.0) (>= net8.0))
      Microsoft.Testing.Platform.MSBuild (>= 2.1) - restriction: || (== net462) (== net8.0) (&& (== netstandard2.0) (>= net462)) (&& (== netstandard2.0) (>= net8.0))
    Runfiles (0.14)
    System.Buffers (4.5.1) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (== netstandard2.0)
    System.Collections.Immutable (8.0)
      System.Memory (>= 4.5.5) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (== netstandard2.0)
      System.Runtime.CompilerServices.Unsafe (>= 6.0) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (&& (== net8.0) (< net7.0)) (== netstandard2.0)
    System.Diagnostics.DiagnosticSource (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
      System.Memory (>= 4.5.4) - restriction: || (== net462) (&& (== net8.0) (>= net461)) (&& (== net8.0) (< net5.0)) (== netstandard2.0)
      System.Runtime.CompilerServices.Unsafe (>= 6.0)
    System.Diagnostics.EventLog (6.0) - restriction: || (&& (== net462) (>= netstandard2.1)) (== net8.0) (== netstandard2.0)
      System.Security.Principal.Windows (>= 5.0) - restriction: || (== net462) (&& (== net8.0) (>= net461)) (&& (== net8.0) (< net6.0)) (&& (== net8.0) (< netcoreapp3.1)) (== netstandard2.0)
    System.Memory (4.5.5) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (== netstandard2.0)
      System.Buffers (>= 4.5.1) - restriction: || (== net462) (&& (== net8.0) (>= monotouch)) (&& (== net8.0) (>= net461)) (&& (== net8.0) (< netcoreapp2.0)) (&& (== net8.0) (< netstandard1.1)) (&& (== net8.0) (< netstandard2.0)) (&& (== net8.0) (>= xamarinios)) (&& (== net8.0) (>= xamarinmac)) (&& (== net8.0) (>= xamarintvos)) (&& (== net8.0) (>= xamarinwatchos)) (== netstandard2.0)
      System.Numerics.Vectors (>= 4.4) - restriction: || (&& (== net462) (== net8.0)) (&& (== net462) (< net45) (>= netstandard2.0)) (&& (== net8.0) (< netcoreapp2.0)) (== netstandard2.0)
      System.Numerics.Vectors (>= 4.5) - restriction: || (== net462) (&& (== net8.0) (>= net461)) (&& (== netstandard2.0) (>= net461))
      System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (== net462) (&& (== net8.0) (>= monotouch)) (&& (== net8.0) (>= net461)) (&& (== net8.0) (< netcoreapp2.0)) (&& (== net8.0) (< netcoreapp2.1)) (&& (== net8.0) (< netstandard1.1)) (&& (== net8.0) (< netstandard2.0)) (&& (== net8.0) (>= uap10.1)) (&& (== net8.0) (>= xamarinios)) (&& (== net8.0) (>= xamarinmac)) (&& (== net8.0) (>= xamarintvos)) (&& (== net8.0) (>= xamarinwatchos)) (== netstandard2.0)
    System.Numerics.Vectors (4.5) - restriction: || (== net462) (&& (== net8.0) (>= net461)) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< netcoreapp2.0)) (== netstandard2.0)
    System.Reflection.Emit (4.7) - restriction: || (&& (== net462) (== net8.0)) (&& (== net8.0) (< netstandard2.1)) (== netstandard2.0)
      System.Reflection.Emit.ILGeneration (>= 4.7) - restriction: || (&& (== net462) (== net8.0)) (&& (== net462) (< net45)) (&& (== net462) (< netstandard1.1)) (&& (== net462) (>= uap10.1)) (&& (== net462) (>= wpa81)) (&& (== net8.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net8.0) (< netstandard1.1)) (&& (== net8.0) (< netstandard2.0)) (&& (== net8.0) (>= uap10.1)) (== netstandard2.0)
    System.Reflection.Emit.ILGeneration (4.7) - restriction: || (&& (== net462) (== net8.0)) (&& (== net8.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net8.0) (< netstandard1.1)) (&& (== net8.0) (< netstandard2.0)) (&& (== net8.0) (>= uap10.1)) (== netstandard2.0)
    System.Reflection.Metadata (8.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
      System.Collections.Immutable (>= 8.0)
      System.Memory (>= 4.5.5) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (== netstandard2.0)
    System.Reflection.TypeExtensions (4.4) - restriction: || (&& (== net462) (< net452) (>= netstandard2.0)) (== net8.0) (== netstandard2.0)
    System.Runtime.CompilerServices.Unsafe (6.0) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (&& (== net8.0) (< net7.0)) (== netstandard2.0)
    System.Security.Principal.Windows (5.0) - restriction: || (&& (== net462) (== net8.0)) (&& (== net462) (>= netcoreapp3.1)) (&& (== net462) (>= netstandard2.1)) (&& (== net8.0) (>= net461)) (&& (== net8.0) (< net6.0)) (&& (== net8.0) (< netcoreapp3.1)) (== netstandard2.0)
    System.Text.Encodings.Web (8.0) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (&& (== net8.0) (< net7.0)) (== netstandard2.0)
      System.Buffers (>= 4.5.1) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (== netstandard2.0)
      System.Memory (>= 4.5.5) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (== netstandard2.0)
      System.Runtime.CompilerServices.Unsafe (>= 6.0) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (&& (== net8.0) (< net7.0)) (== netstandard2.0)
    System.Text.Json (8.0.6)
      Microsoft.Bcl.AsyncInterfaces (>= 8.0) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (== netstandard2.0)
      System.Buffers (>= 4.5.1) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (== netstandard2.0)
      System.Memory (>= 4.5.5) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (== netstandard2.0)
      System.Runtime.CompilerServices.Unsafe (>= 6.0) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (&& (== net8.0) (< net7.0)) (== netstandard2.0)
      System.Text.Encodings.Web (>= 8.0) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (&& (== net8.0) (< net7.0)) (== netstandard2.0)
      System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (== netstandard2.0)
      System.ValueTuple (>= 4.5) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== netstandard2.0) (>= net462))
    System.Threading.Channels (8.0)
      System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< netstandard2.1)) (== netstandard2.0)
    System.Threading.Tasks.Extensions (4.5.4) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< net6.0)) (== netstandard2.0)
      System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (== net462) (&& (== net8.0) (>= net461)) (&& (== net8.0) (< netcoreapp2.1)) (&& (== net8.0) (< netstandard1.0)) (&& (== net8.0) (< netstandard2.0)) (&& (== net8.0) (>= wp8)) (== netstandard2.0)
    System.ValueTuple (4.5) - restriction: || (== net462) (&& (== net8.0) (>= net462)) (&& (== netstandard2.0) (>= net462))
