anchor.diff:              Debug.Assert(symbolUse.Symbol :? FSharpMemberFunctionOrValue, "Only accept symbol use of members.")
               try
                   let m = symbolUse.Symbol :?> FSharpMemberFunctionOrValue
  -                let typ = m.FullType
  -                let signature = sprintf "%s:%s" m.DisplayName (typ.Format(displayContext))
  -                Some (signature.Replace(" ", ""))
  +                match m.FullType with
  +                | EventFunctionType(argType, retType) when m.IsEvent ->
  +                    let signature = removeWhitespace (sprintf "%s:%s->%s" m.DisplayName (argType.Format(displayContext)) 
  +                                        (retType.Format(displayContext)))
  +                    // CLI events correspond to two members add_* and remove_*
  +                    Some [ sprintf "add_%s" signature; sprintf "remove_%s" signature]
  +                | typ ->
  +                    let signature = removeWhitespace (sprintf "%s:%s" m.DisplayName (typ.Format(displayContext)))
  +                    Some [signature]
               with _ ->
                   None
           async {
  
positive.code:         seq {
              for (iface, instantiations) in getInterfaces e do
                  yield! iface.MembersFunctionsAndValues |> Seq.choose (fun m -> 
                             // Use this hack when FCS doesn't return enough information on .NET properties
                             if (iface.IsFSharp || not m.IsProperty) && not m.IsEvent then Some (m, instantiations) else None)
           }
  
      let hasNoInterfaceMember e =
  
negative.code:                 |> Seq.map getMemberByLocation
                  |> Async.Parallel
              return symbolUses |> Seq.choose (Option.bind formatMemberSignature)
                                |> Seq.concat
                                |> Set.ofSeq
          }
  
  