anchor.diff:    ==> "GenerateFSIStrings"
     ==> "Prepare"
     ==> "Build"
  -  =?> ("DotnetCoreCodeGen", isDotnetCliInstalled)
  -  =?> ("DotnetCoreBuild", isDotnetCliInstalled)
  +  =?> ("DotnetCoreCodeGen", isDotnetSDKInstalled)
  +  =?> ("Build.NetCore", isDotnetSDKInstalled)
     ==> "RunTests"
  -  =?> ("DotnetCoreTests", isDotnetCliInstalled)
  +  =?> ("RunTests.NetCore", isDotnetSDKInstalled)
     ==> "All"
   
   "All"
     ==> "PrepareRelease" 
     ==> "SourceLink"
     ==> "NuGet"
  -  =?> ("AddDotnetCoreToNupkg", isDotnetCliInstalled)
  +  =?> ("Nuget.AddNetCore", isDotnetSDKInstalled)
     ==> "GitHubRelease"
     ==> "PublishNuGet"
     ==> "Release"
  
positive.code: )
  
  // --------------------------------------------------------------------------------------
  // .NET CLI and .NET Core
  
  let isDotnetCliInstalled = (try Shell.Exec("dotnet", "--info") = 0 with _ -> false)
  let assertExitCodeZero x = if x = 0 then () else failwithf "Command failed with exit code %i" x
  let runCmdIn workDir exe = Printf.ksprintf (fun args -> Shell.Exec(exe, args, workDir) |> assertExitCodeZero)
  
  Target "DotnetCoreCodeGen" (fun _ ->
      let lexArgs = "--lexlib Internal.Utilities.Text.Lexing"
  
negative.code:     let netcoreNupkg = sprintf "src/fsharp/%s/bin/Release/%s/%s.%s.nupkg" packageName netcoreTFM packageName (release.AssemblyVersion)
  
      //dotnet-mergenupkg is in the FSharp.Compiler.Service project.json
      let runInDir exe = runCmdIn @"src/fsharp/FSharp.Compiler.Service/" exe
      runInDir "dotnet" """mergenupkg --source "%s" --other "%s" --framework %s """ (System.IO.Path.GetFullPath nupkg) (System.IO.Path.GetFullPath netcoreNupkg) netcoreTFM
  
  Target "Nuget.AddNetCore" (fun _ ->
      mergePackage "FSharp.Compiler.Service" "netstandard1.6"
      mergePackage "FSharp.Compiler.Service.ProjectCracker" "netstandard1.6"
      mergePackage "FSharp.Compiler.Service.ProjectCrackerTool" "netcoreapp1.0"
  