anchor.diff:                      let s2 = FrameworkRestriction.AtLeast(DotNetStandard alias)
                       if packages |> Array.exists (fun (n,v,r) -> r |> List.exists (fun r -> r = s || r = s2)) |> not then
                           yield n,v,[s2]
  -                   
  +
                    if standardAliases = [] && not <| Array.exists isMatch packages then
                        for p in p.Split([|'+'; '-'|]) do
                           match FrameworkDetection.Extract p with
  
positive.code:             return parseODataDetails(url,nugetURL,packageName,version,raw)
      }
  
  let urlSimilarToTfsOrVsts url = 
      String.containsIgnoreCase "visualstudio.com" url || (String.containsIgnoreCase "/_packaging/" url && String.containsIgnoreCase "/nuget/v" url)
  
  /// Gets package details from NuGet via OData
  let getDetailsFromNuGetViaOData auth nugetURL (packageName:PackageName) (version:SemVerInfo) =
      let queryPackagesProtocol (packageName:PackageName) = 
          async {
              let url = sprintf "%s/Packages(Id='%O',Version='%O')" nugetURL packageName version
              let! response = safeGetFromUrl(auth,url,acceptXml)
  
negative.code:                       | Some(Credentials(_)) -> true
                        | _ -> false)
                          -> do! download false (attempt + 1)
                  | exn when String.IsNullOrWhiteSpace !downloadUrl -> failwithf "Could not download %O %O.%s    %s" packageName version Environment.NewLine exn.Message
                  | exn -> failwithf "Could not download %O %O from %s.%s    %s" packageName version !downloadUrl Environment.NewLine exn.Message }
  
      async {
  