anchor.diff:  
             outFileOpt, directory, getItems, references, projectReferences, getProp project, project.FullFileName
   
  +      let vs =
  +          let programFiles =
  +              let getEnv v =
  +                  let result = System.Environment.GetEnvironmentVariable(v)
  +                  match result with
  +                  | null -> None
  +                  | _ -> Some result
  +
  +              match List.tryPick getEnv [ "ProgramFiles(x86)";  "ProgramFiles" ] with
  +              | Some r -> r
  +              | None -> "C:\\Program Files (x86)"
  +
  +          let vsVersions = ["14.0"; "12.0"]
  +          let msbuildBin v = IO.Path.Combine(programFiles, "MSBuild", v, "Bin", "MSBuild.exe")
  +          List.tryFind (fun v -> IO.File.Exists(msbuildBin v)) vsVersions
  +
         let CrackProjectUsingNewBuildAPI(fsprojFile) =
             let fsprojFullPath = try Path.GetFullPath(fsprojFile) with _ -> fsprojFile
             let fsprojAbsDirectory = Path.GetDirectoryName fsprojFullPath
  
positive.code:               let project = engine.LoadProject(xmlReader, FullPath=fsprojFullPath)
                
                project.SetGlobalProperty("BuildingInsideVisualStudio", "true") |> ignore
                project.SetGlobalProperty("VisualStudioVersion", "12.0") |> ignore
                project.SetGlobalProperty("ShouldUnsetParentConfigurationAndPlatform", "false") |> ignore
                for (prop, value) in properties do
                      project.SetGlobalProperty(prop, value) |> ignore
  
negative.code:           else
                None
  
        let CrackProjectUsingOldBuildAPI(fsprojFile:string) = 
            let engine = new Microsoft.Build.BuildEngine.Engine()
            Option.iter (fun l -> engine.RegisterLogger(l)) logOpt
  