anchor.diff:  
   
   /// Wrapper type for the 'FSharp.Compiler.dll' assembly - expose types we use
  -type FSharpCompiler(reqVersion:FSharpCompilerVersion) =      
  -    let otherVersion = match reqVersion with FSharp_2_0 -> FSharp_3_0 | FSharp_3_0 -> FSharp_2_0
  -    let checkVersion (ver:FSharpCompilerVersion) (ass:System.Reflection.Assembly) = 
  -        if ass = null then failwith (sprintf "no assembly found, wanted verion %s" (ver.ToString())) else
  -        let nm = ass.GetName()
  -        if nm = null then failwith (sprintf "no assembly name found, wanted verion %s" (ver.ToString())) 
  -        elif nm.Name = null then failwith (sprintf "no assembly name property Name found, nm = %s, wanted verion %s" (nm.ToString()) (ver.ToString()))
  -        elif nm.Version.ToString() <> ver.ToString() then failwith (sprintf "loaded %s, but had wrong version, wanted %s, got %s" nm.Name (ver.ToString()) (nm.Version.ToString()))
  -        else ass
  -    let tryVersion (ver:FSharpCompilerVersion) = 
  -         Debug.WriteLine(sprintf "Resolution: Loading FSharp Compiler DLL version %A" ver)
  -         // Somewhat surprisingly, Load() and LoadWithPartialName() can still return
  -         // assemblies with the wrong version, if the right version is not available....
  -         try 
  -           // Try getting the assemblies using the microsoft strong name
  -           Debug.WriteLine("Resolution: Looking in GAC...")
  -           let asm = Assembly.Load("FSharp.Compiler, Version="+ver.ToString()+", Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") |> checkVersion ver
  -           let asm2 = Assembly.Load("FSharp.Compiler.Server.Shared, Version="+ver.ToString()+", Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") |> checkVersion ver
  -           asm,asm2,ver
  -         with _ -> 
  -           try 
  -             // Try getting the assemblies by partial name. 
  -             Debug.WriteLine(sprintf "Resolution: Looking with partial name...")
  -             let asm = Assembly.LoadWithPartialName("FSharp.Compiler, Version="+ver.ToString()) |> checkVersion ver
  -             let asm2 = Assembly.LoadWithPartialName("FSharp.Compiler.Server.Shared, Version="+ver.ToString()) |> checkVersion ver
  -             asm,asm2,ver
  -           with err -> 
  -             match FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(ver) with
  -             | None -> raise err
  -             | Some dir -> 
  -             // Try getting the assemblies by location
  -             Debug.WriteLine(sprintf "Resolution: Looking in compiler directory '%s'..." dir)
  -             let asm = Assembly.LoadFrom(Path.Combine(dir, "FSharp.Compiler.dll")) |> checkVersion ver
  -             let asm2 = Assembly.LoadFrom(Path.Combine(dir, "FSharp.Compiler.Server.Shared.dll")) |> checkVersion ver
  -             
  -             asm,asm2,ver
  -
  -    let asm,asm2,actualVersion = 
  -        try tryVersion reqVersion 
  -        with e -> 
  -            match (try Some (tryVersion otherVersion) with e -> None) with 
  -            | Some res -> res 
  -            | None -> reraise()
  -        
  -
  -    static let v20 = lazy FSharpCompiler(FSharp_2_0) 
  -    static let v30 = lazy FSharpCompiler(FSharp_3_0) 
  -    let interactiveCheckerType = asm.GetType("Microsoft.FSharp.Compiler.SourceCodeServices.InteractiveChecker")
  -    let isResultObsoleteType = asm.GetType("Microsoft.FSharp.Compiler.SourceCodeServices.IsResultObsolete")
  -    let declarationSetType = asm.GetType("Microsoft.FSharp.Compiler.SourceCodeServices.DeclarationSet")
  -    let checkOptionsType = asm.GetType("Microsoft.FSharp.Compiler.SourceCodeServices.CheckOptions")
  -    let parserType = asm.GetType("Microsoft.FSharp.Compiler.Parser")
  -    let sourceTokenizerType = asm.GetType("Microsoft.FSharp.Compiler.SourceCodeServices.SourceTokenizer")
  -    let tokenInformationType = asm.GetType("Microsoft.FSharp.Compiler.SourceCodeServices.TokenInformation")
  -    let fSharpCore = asm.GetReferencedAssemblies() |> Array.find (fun x -> x.Name = "FSharp.Core") |> fun a -> Assembly.Load(a)
  -
  -    let interactiveServerType = asm2.GetType("Microsoft.FSharp.Compiler.Server.Shared.FSharpInteractiveServer")
  -    
  +type FSharpCompiler(asmCompiler:Assembly, asmCompilerServer:Assembly, actualVersion) =
  +
  +    static let v20 = lazy FSharpCompiler.FromVersion(FSharp_2_0)
  +    static let v30 = lazy FSharpCompiler.FromVersion(FSharp_3_0) 
  +
  +    static let mutable currentWrapper =
  +        let c = match FSharpCompilerVersion.LatestKnown with FSharp_2_0 -> v20 | FSharp_3_0 -> v30
  +        try c.Force() with e -> Debug.WriteLine(sprintf "Compiler Error: %s" (e.ToString())); reraise()
  +    
  +    let interactiveCheckerType = asmCompiler.GetType("Microsoft.FSharp.Compiler.SourceCodeServices.InteractiveChecker")
  +    let isResultObsoleteType = asmCompiler.GetType("Microsoft.FSharp.Compiler.SourceCodeServices.IsResultObsolete")
  +    let declarationSetType = asmCompiler.GetType("Microsoft.FSharp.Compiler.SourceCodeServices.DeclarationSet")
  +    let checkOptionsType = asmCompiler.GetType("Microsoft.FSharp.Compiler.SourceCodeServices.CheckOptions")
  +    let parserType = asmCompiler.GetType("Microsoft.FSharp.Compiler.Parser")
  +    let sourceTokenizerType = asmCompiler.GetType("Microsoft.FSharp.Compiler.SourceCodeServices.SourceTokenizer")
  +    let tokenInformationType = asmCompiler.GetType("Microsoft.FSharp.Compiler.SourceCodeServices.TokenInformation")
  +    let fSharpCore = asmCompiler.GetReferencedAssemblies() |> Array.find (fun x -> x.Name = "FSharp.Core") |> fun a -> Assembly.Load(a)
  +
       let fSharpValueType = fSharpCore.GetType("Microsoft.FSharp.Reflection.FSharpValue")
       let unitType = fSharpCore.GetType(typeof<unit>.FullName)
       let fsharpFuncType = fSharpCore.GetType("Microsoft.FSharp.Core.FSharpFunc`2")
  
positive.code:   type Parameter(wrapped:obj) = 
      member x.Name : string = wrapped?Name
      member x.CanonicalTypeTextForSorting : string option  = 
        let fsc = FSharpCompiler.LatestAvailable
        match fsc.ActualVersion with 
        | FSharp_2_0 -> None
        | FSharp_3_0 -> Some (wrapped?CanonicalTypeTextForSorting)
  
negative.code:     member x.UseScriptResolutionRules : bool = wrapped?UseScriptResolutionRules
      member x.LoadTime : System.DateTime = 
            // This property only available with F# 3.0
            let fsc = FSharpCompiler.Current
            match fsc.ActualVersion with 
            | FSharpCompilerVersion.FSharp_2_0 -> System.DateTime.Now
            | FSharpCompilerVersion.FSharp_3_0 -> try wrapped?LoadTime with _ -> System.DateTime.Now
      static member Create(fileName:string, fileNames:string[], options:string[], incomplete:bool, scriptRes:bool, loadTime:System.DateTime) =
        let res = 
            let fsc = FSharpCompiler.Current
            match fsc.ActualVersion with 
            | FSharpCompilerVersion.FSharp_2_0 -> 
                fsc.CheckOptionsType?``.ctor``(fileName, fileNames, options, incomplete, scriptRes)
  