anchor.diff:      attributes
       |> Seq.tryFind (fun a -> a.IsObsoleteAttribute)
       |> Option.map (fun a -> a.ObsoleteMessage)
  +    |> Option.defaultValue ""
  +
  +  /// Tries to find the CustomOperationAttribute and return its obsolete message
  +  static member internal TryGetCustomOperationName(attributes:seq<Attribute>)=
  +    attributes
  +    |> Seq.tryFind (fun a -> a.IsCustomOperationAttribute)
  +    |> Option.map (fun a -> a.CustomOperationName)
       |> Option.defaultValue ""
   
   /// Represents the details of an F# method, property, event, function or value, including extension members
  
positive.code:             |> Option.map string
              |> Option.defaultValue ""
      if x.IsObsoleteAttribute then tryFindObsoleteMessage else ""
  
    /// Formats the attribute with the given name
    member private x.Format(attributeName:string, removeAttributeSuffix:bool) =
  
negative.code:   /// Returns the obsolete message, when this member is obsolete. When its not or no message was specified, an empty string is returned
    member x.ObsoleteMessage =
      Attribute.TryGetObsoleteMessage(x.Attributes)
  
    /// Gets a value indicating whether this member has CustomOperationAttribute
    member x.IsCustomOperation =
      x.Attributes
      |> Seq.exists (fun a -> a.IsCustomOperationAttribute)
  
    /// Returns the custom operation name, when this attribute is the CustomOperationAttribute. When its not an empty string is returned
    member x.CustomOperationName =
      Attribute.TryGetCustomOperationName(x.Attributes)
  
  /// Represents an F# type.
  type Type =
  