anchor.diff:          | "1.6" -> Some(DotNetStandardVersion.V1_6)
           | "2"   -> Some(DotNetStandardVersion.V2_0)
           | "2.1" -> Some(DotNetStandardVersion.V2_1)
  +        | _ -> None
  +
  +[<RequireQualifiedAccess>]
  +type Net5WindowsVersion =
  +    | V7_0
  +    | V8_0
  +    | V10_0_17763_0
  +    | V10_0_18362_0
  +    | V10_0_19041_0
  +    override this.ToString() =
  +        match this with
  +        | V7_0 -> "7.0"
  +        | V8_0 -> "8.0"
  +        | V10_0_17763_0 -> "10.0.17763.0"
  +        | V10_0_18362_0 -> "10.0.18362.0"
  +        | V10_0_19041_0 -> "10.0.19041.0"
  +
  +    static member TryParse s =
  +        match s with
  +        | "7.0" -> Some Net5WindowsVersion.V7_0
  +        | "8.0" -> Some Net5WindowsVersion.V8_0
  +        | "10.0.17763.0" -> Some Net5WindowsVersion.V10_0_17763_0
  +        | "10.0.18362.0" -> Some Net5WindowsVersion.V10_0_18362_0
  +        | "10.0.19041.0" -> Some Net5WindowsVersion.V10_0_19041_0
  +        | _ -> None
  +
  +[<RequireQualifiedAccess>]
  +type Net5Os =
  +    | Android
  +    | IOs
  +    | MacOs
  +    | TvOs
  +    | WatchOs
  +    | Windows
  +    | WindowsWithVersion of Net5WindowsVersion
  +    override this.ToString() =
  +        match this with
  +        | Android -> "android"
  +        | IOs -> "ios"
  +        | MacOs -> "macos"
  +        | TvOs -> "tvos"
  +        | WatchOs -> "watchos"
  +        | Windows -> "windows"
  +        | WindowsWithVersion v -> "windows" + v.ToString()
  +    
  +    static member TryParse s =
  +        match s with
  +        | "android" -> Some Net5Os.Android
  +        | "ios" -> Some Net5Os.Android
  +        | "macos" -> Some Net5Os.Android
  +        | "tvos" -> Some Net5Os.Android
  +        | "watchos" -> Some Net5Os.Android
  +        | "windows" -> Some Net5Os.Android
  +        | _ when s.StartsWith("windows") -> 
  +            let versionPart = s.Substring ("windows".Length)
  +            Net5WindowsVersion.TryParse(versionPart)
  +            |> Option.map Net5Os.WindowsWithVersion
           | _ -> None
   
   [<RequireQualifiedAccess>]
  
positive.code:         | FrameworkVersion.V4_7_2 -> "472"
          | FrameworkVersion.V4_8 -> "48"
          | FrameworkVersion.V5 -> "5.0"
  
      static member TryParse s =
          match s with
  
negative.code:         FrameworkVersion.V4_7_2
          FrameworkVersion.V4_8
          FrameworkVersion.V5
          FrameworkVersion.V5WithOs(Net5Os.Android)
          FrameworkVersion.V5WithOs(Net5Os.IOs)
          FrameworkVersion.V5WithOs(Net5Os.MacOs)
          FrameworkVersion.V5WithOs(Net5Os.TvOs)
          FrameworkVersion.V5WithOs(Net5Os.WatchOs)
          FrameworkVersion.V5WithOs(Net5Os.Windows)
          FrameworkVersion.V5WithOs(Net5Os.WindowsWithVersion(Net5WindowsVersion.V7_0))
          FrameworkVersion.V5WithOs(Net5Os.WindowsWithVersion(Net5WindowsVersion.V8_0))
          FrameworkVersion.V5WithOs(Net5Os.WindowsWithVersion(Net5WindowsVersion.V10_0_17763_0))
          FrameworkVersion.V5WithOs(Net5Os.WindowsWithVersion(Net5WindowsVersion.V10_0_18362_0))
          FrameworkVersion.V5WithOs(Net5Os.WindowsWithVersion(Net5WindowsVersion.V10_0_19041_0))
      ]
  
      let DotNetFrameworkIdentifiers =
  