anchor.diff:  open System.Threading
   open System.Text.RegularExpressions
   open System.Xml.Linq
  +open Yaaf.FSharp.Scripting
   
   let private FSIPath = @".\tools\FSharp\;.\lib\FSharp\;[ProgramFilesX86]\Microsoft SDKs\F#\4.0\Framework\v4.0;[ProgramFilesX86]\Microsoft SDKs\F#\3.1\Framework\v4.0;[ProgramFilesX86]\Microsoft SDKs\F#\3.0\Framework\v4.0;[ProgramFiles]\Microsoft F#\v4.0\;[ProgramFilesX86]\Microsoft F#\v4.0\;[ProgramFiles]\FSharp-2.0.0.0\bin\;[ProgramFilesX86]\FSharp-2.0.0.0\bin\;[ProgramFiles]\FSharp-1.9.9.9\bin\;[ProgramFilesX86]\FSharp-1.9.9.9\bin\"
   
  
positive.code: let runBuildScriptWithFsiArgsAt printDetails (FsiArgs(fsiOptions, script, scriptArgs)) env useCache cleanCache =
      runFAKEScriptWithFsiArgsAndRedirectMessages
          printDetails (FsiArgs(fsiOptions, script, scriptArgs)) env
          traceError (fun s-> traceFAKE "%s" s)
          useCache
          cleanCache
  
  
negative.code: | Disk
  
  let hashRegex = Text.RegularExpressions.Regex("(?<script>.+)_(?<hash>[a-zA-Z0-9]+\.dll$)", System.Text.RegularExpressions.RegexOptions.Compiled)
  
  type private CacheInfo =
    {
      ScriptFileName : string
      AssemblyPath : string
      AssemblyWarningsPath : string
      CacheConfigPath : string
      CacheConfig : Lazy<Cache.CacheConfig>
      IsValid : bool
    }
  
  let private getCacheInfoFromScript printDetails fsiOptions scriptPath =
      let allScriptContents = getAllScripts scriptPath
      let scriptHash = lazy (getScriptHash allScriptContents fsiOptions)
      //TODO this is only calculating the hash for the input file, not anything #load-ed
      
      let scriptFileName = Path.GetFileName(scriptPath)
      let hashPath = "./.fake/" + scriptFileName + "_" + scriptHash.Value
      let assemblyPath = hashPath + ".dll"
      let assemblyWarningsPath = hashPath + "_warnings.txt"
      let cacheConfigPath = hashPath + "_config.xml"
      let cacheConfig = lazy Cache.read cacheConfigPath
      let cacheValid =
          let cacheFilesExist = 
              File.Exists(assemblyPath) &&
              File.Exists(cacheConfigPath) &&
              File.Exists(assemblyWarningsPath)
          if cacheFilesExist then
              let loadedAssemblies =
                  cacheConfig.Value.Assemblies
  