anchor.diff:      override x.OnCreateCompilationParameters(config : DotNetProjectConfiguration, kind : ConfigurationKind) : DotNetCompilerParameters = 
           let pars = new FSharpCompilerParameters()
           // Set up the default options
  -        if (supportedPlatforms |> Array.exists (fun x -> x.Contains(config.Platform))) then pars.PlatformTarget <- config.Platform
  -        if (kind = ConfigurationKind.Debug) then 
  +        if supportedPlatforms |> Array.exists (fun x -> x.Contains(config.Platform)) then pars.PlatformTarget <- config.Platform
  +        match kind with
  +        | ConfigurationKind.Debug -> 
               pars.AddDefineSymbol "DEBUG"
               pars.Optimize <- false
               pars.GenerateTailCalls <- false
  -        if (kind = ConfigurationKind.Release) then 
  +        | ConfigurationKind.Release -> 
               pars.Optimize <- true
               pars.GenerateTailCalls <- true
  -        // TODO: set up the documentation file to be AssemblyName.xml by default (but how do we get AssemblyName here?)
  -        // pars.DocumentationFile <- ""
  -        //    System.IO.Path.GetFileNameWithoutExtension(config.CompiledOutputName.ToString())+".xml" 
  +        | _ -> ()
  +        //pars.DocumentationFile <- config.CompiledOutputName.FileNameWithoutExtension + ".xml"
           pars :> DotNetCompilerParameters
       
       override x.OnGetSupportedClrVersions() = 
  
positive.code: 
      override x.OnFileAddedToProject(e) =
          base.OnFileAddedToProject(e)
          invalidateFiles(e)
  
      override x.OnFileRemovedFromProject(e) =
          base.OnFileRemovedFromProject(e)
          invalidateFiles(e)
  
      override x.OnFileRenamedInProject(e) =
          base.OnFileRenamedInProject(e)
          invalidateFiles(e)
  
      override x.OnFilePropertyChangedInProject(e) =
          base.OnFilePropertyChangedInProject(e)
          invalidateFiles(e)
  
      override x.OnReferenceAddedToProject(e) =
          base.OnReferenceAddedToProject(e)
          invalidateProjectFile()
  
      override x.OnReferenceRemovedFromProject(e) =
          base.OnReferenceRemovedFromProject(e)
          invalidateProjectFile()
  
      override x.OnDispose () =
          invalidateProjectFile()
  
          // FIXME: is it correct to do it every time a project is disposed?
          langServ.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients()
          base.OnDispose ()
  
negative.code:     inherit DotNetProject()
      // Keep the platforms combo of CodeGenerationPanelWidget in sync with this list
      let supportedPlatforms = [| "anycpu"; "x86"; "x64"; "itanium" |]
      let FSharp3Import          = "$(MSBuildExtensionsPath32)\\..\\Microsoft SDKs\\F#\\3.0\\Framework\\v4.0\\Microsoft.FSharp.Targets"
      let FSharp31Import         = "$(MSBuildExtensionsPath32)\\..\\Microsoft SDKs\\F#\\3.1\\Framework\\v4.0\\Microsoft.FSharp.Targets"
      let FSharp31PortableImport = "$(MSBuildExtensionsPath32)\\..\\Microsoft SDKs\\F#\\3.1\\Framework\\v4.0\\Microsoft.Portable.FSharp.Targets"
  
      let langServ = MDLanguageService.Instance
      let mutable initilisedAsPortable = false
      
      let invalidateProjectFile() =
          try 
              if IO.File.Exists (self.FileName.ToString()) then
                let options = langServ.GetProjectCheckerOptions(self.FileName.ToString(), [("Configuration", IdeApp.Workspace.ActiveConfigurationId)])
                langServ.InvalidateConfiguration(options)
                langServ.ClearProjectInfoCache()
                ()
          with ex -> LoggingService.LogError ("Could not invalidate configuration", ex)
      
      let invalidateFiles (args:#ProjectFileEventInfo seq) =
  