anchor.diff:          | V4_7_2    -> "v4.7.2"
           | V4_8      -> "v4.8"
           | V5        -> "v5.0"
  +        | V5WithOs o-> "v5.0-" + o.ToString() 
   
       member this.ShortString() =
           match this with
  
positive.code:     | V4_7_2
      | V4_8
      | V5
      override this.ToString() =
          match this with
          | V1        -> "v1.0"
  
negative.code:         | "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>]
  