anchor.diff:      /// Append two maps with the properties of the second replacing properties of the first
       let private appendMap first second =
           Map.fold (fun state key value -> Map.add key value state) first second
  +
  +    let inline getPackageIdAttribute (pf:ProjectFile) (node:XmlNode) =
  +        node |> getAttribute "Include"
  +        |> Option.orElseWith (fun _ -> node |> getAttribute "Update")
  +        |> Option.defaultWith (fun _ -> failwithf "project file '%s' contains a reference without 'Include' or 'Update' attribute" pf.FileName)
   
       let private calculatePropertyMap (projectFile:ProjectFile) defaultProperties =
           let defaultProperties = appendMap defaultProperties (getReservedProperties projectFile)
  
positive.code:                     VersionRange.AtLeast (v.Replace("*","0"))
                  else
                      VersionRange.Exactly v
  
              { NugetPackage.Id = node |> getAttribute "Include" |> Option.get
                VersionRange = versionRange
                Kind = NugetPackageKind.Package
                TargetFramework = None })
  
negative.code:         |> List.filter (getDescendants "PrivateAssets" >>
                          List.exists (fun x -> x.InnerText = "All") >>
                          not)
  
      let getPackageReferences project =
          packageReferencesNoPrivateAssets project
          |> List.map (getPackageIdAttribute project)
  
      let getCliReferences project =
          cliToolsNoPrivateAssets project
  