anchor.diff:                      | Remove key -> 
                           match cache |> Map.tryFind key with
                           | Some value -> 
  -                            match box value with
  -                            | :? IDisposable as d -> d.Dispose()
  -                            | _ -> ()
  +                            disposeValue value
                               cache |> Map.remove key
  -                        | _ -> cache) 
  +                        | _ -> cache
  +                    | Clear -> 
  +                        cache |> Map.toSeq |> Seq.iter (fun (_, value) -> disposeValue value)
  +                        Map.empty) 
               }
           loop Map.empty)
       do agent.Error.Add (fail "%O")
       member x.Get key creator = agent.PostAndReply (fun r -> Get (key, creator, r))
       member x.Remove key = agent.Post (Remove key)
  +    member x.Clear() = agent.Post Clear
   
   [<AutoOpen>]
   module FSharpSymbolExtensions =
  
positive.code:                 String.Equals(ext, ".fsscript", StringComparison.OrdinalIgnoreCase) ||
                  String.Equals(ext, ".fs", StringComparison.OrdinalIgnoreCase) then
                  Some (VirtualProjectProvider(buffer, filePath) :> _)
              else 
                  None
          else 
              None
  
negative.code: 
      do match events with
          | Some events ->
              events.SolutionEvents.add_AfterClosing (fun _ -> cache.Clear())
              events.ProjectItemsEvents.add_ItemRenamed (fun p _ -> onProjectItemChanged p)
              events.ProjectItemsEvents.add_ItemRemoved (fun p -> onProjectItemChanged p)
              events.ProjectItemsEvents.add_ItemAdded (fun p -> onProjectItemChanged p)
  