anchor.diff:  
       override fsc.GenerateCommandLineCommands() =
           let builder = new FscCommandLineBuilder()
  -
           if not (String.IsNullOrEmpty(dotnetFscCompilerPath)) then builder.AppendSwitch(dotnetFscCompilerPath)
  -
  -        // OutputAssembly
  -        builder.AppendSwitchIfNotNull("-o:", outputAssembly)
  -        // CodePage
  -        builder.AppendSwitchIfNotNull("--codepage:", codePage)
  -        // Debug
  -        if debugSymbols then
  -            builder.AppendSwitch("-g")
  -        // DebugType
  -        builder.AppendSwitchIfNotNull("--debug:", 
  -            if debugType = null then null else
  -                match debugType.ToUpperInvariant() with
  -                | "NONE"     -> null
  -                | "PORTABLE" -> "portable"
  -                | "PDBONLY"  -> "pdbonly"
  -                | "FULL"     -> "full"
  -                | _          -> null)
  -        // NoFramework
  -        if noFramework then 
  -            builder.AppendSwitch("--noframework") 
  -        // BaseAddress
  -        builder.AppendSwitchIfNotNull("--baseaddress:", baseAddress)
  -        // DefineConstants
  -        for item in defineConstants do
  -            builder.AppendSwitchIfNotNull("--define:", item.ItemSpec)          
  -        // DocumentationFile
  -        builder.AppendSwitchIfNotNull("--doc:", documentationFile)
  -        // GenerateInterfaceFile
  -        builder.AppendSwitchIfNotNull("--sig:", generateInterfaceFile)
  -        // KeyFile
  -        builder.AppendSwitchIfNotNull("--keyfile:", keyFile)
  -        // Optimize
  -        if optimize then
  -            builder.AppendSwitch("--optimize+")
  -        else
  -            builder.AppendSwitch("--optimize-")
  -        if not tailcalls then
  -            builder.AppendSwitch("--tailcalls-")
  -        // PdbFile
  -        builder.AppendSwitchIfNotNull("--pdb:", pdbFile)
  -        // Platform
  -        builder.AppendSwitchIfNotNull("--platform:", 
  -            let ToUpperInvariant (s:string) = if s = null then null else s.ToUpperInvariant()
  -            match ToUpperInvariant(platform), prefer32bit, ToUpperInvariant(targetType) with
  -                | "ANYCPU", true, "EXE"
  -                | "ANYCPU", true, "WINEXE" -> "anycpu32bitpreferred"
  -                | "ANYCPU",  _, _  -> "anycpu"
  -                | "X86"   ,  _, _  -> "x86"
  -                | "X64"   ,  _, _  -> "x64"
  -                | "ITANIUM", _, _  -> "Itanium"
  -                | _         -> null)
  -        // Resources
  -        for item in resources do
  -            builder.AppendSwitchIfNotNull("--resource:", item.ItemSpec)
  -        // VersionFile
  -        builder.AppendSwitchIfNotNull("--versionfile:", versionFile)
  -        // References
  -        for item in references do
  -            builder.AppendSwitchIfNotNull("-r:", item.ItemSpec)
  -        // ReferencePath
  -        let referencePathArray = // create a array of strings
  -            match referencePath with
  -            | null -> null
  -            | _ -> referencePath.Split([|';'; ','|], StringSplitOptions.RemoveEmptyEntries)
  -                  
  -        builder.AppendSwitchIfNotNull("--lib:", referencePathArray, ",")   
  -        // TargetType
  -        builder.AppendSwitchIfNotNull("--target:", 
  -            if targetType = null then null else
  -                match targetType.ToUpperInvariant() with
  -                | "LIBRARY" -> "library"
  -                | "EXE" -> "exe"
  -                | "WINEXE" -> "winexe" 
  -                | "MODULE" -> "module"
  -                | _ -> null)
  -        
  -        // NoWarn
  -        match disabledWarnings with
  -        | null -> ()
  -        | _ -> builder.AppendSwitchIfNotNull("--nowarn:", disabledWarnings.Split([|' '; ';'; ','; '\r'; '\n'|], StringSplitOptions.RemoveEmptyEntries), ",")
  -        
  -        // WarningLevel
  -        builder.AppendSwitchIfNotNull("--warn:", warningLevel)
  -
  -        // TreatWarningsAsErrors
  -        if treatWarningsAsErrors then
  -            builder.AppendSwitch("--warnaserror")
  -
  -        // WarningsAsErrors
  -        // Change warning 76, HashReferenceNotAllowedInNonScript/HashDirectiveNotAllowedInNonScript/HashIncludeNotAllowedInNonScript, into an error
  -        // REVIEW: why is this logic here? In any case these are errors already by default!
  -        let warningsAsErrorsArray =
  -            match warningsAsErrors with
  -            | null -> [|"76"|]
  -            | _ -> (warningsAsErrors + " 76 ").Split([|' '; ';'; ','|], StringSplitOptions.RemoveEmptyEntries)                        
  -
  -        builder.AppendSwitchIfNotNull("--warnaserror:", warningsAsErrorsArray, ",")            
  -
  -            
  -        // Win32ResourceFile
  -        builder.AppendSwitchIfNotNull("--win32res:", win32res)
  -
  -        // Win32ManifestFile
  -        builder.AppendSwitchIfNotNull("--win32manifest:", win32manifest)
  -
  -        // VisualStudioStyleErrors 
  -        if vserrors then
  -            builder.AppendSwitch("--vserrors")      
  -
  -        builder.AppendSwitchIfNotNull("--LCID:", vslcid)
  -        if utf8output then
  -            builder.AppendSwitch("--utf8output")
  -            
  -        // When building using the fsc task, always emit the "fullpaths" flag to make the output easier
  -        // for the user to parse
  -        builder.AppendSwitch("--fullpaths")
  -
  -        // When building using the fsc task, also emit "flaterrors" to ensure that multi-line error messages
  -        // aren't trimmed
  -        builder.AppendSwitch("--flaterrors")
  -
  -        builder.AppendSwitchIfNotNull("--subsystemversion:", subsystemVersion)
  -        if highEntropyVA then
  -            builder.AppendSwitch("--highentropyva+")
  -        else
  -            builder.AppendSwitch("--highentropyva-")
  -
  -        builder.AppendSwitchIfNotNull("--targetprofile:", targetProfile)
  -
  -        // OtherFlags - must be second-to-last
  -        builder.AppendSwitchUnquotedIfNotNull("", otherFlags)
  -        capturedArguments <- builder.CapturedArguments()
  -
  -        // Sources - these have to go last
  -        builder.AppendFileNamesIfNotNull(sources, " ")
  -        capturedFilenames <- builder.CapturedFilenames()
  -        let s = builder.ToString()
  -        s
  +        builder.ToString()
  +
  +    override fsc.GenerateResponseFileCommands() =
  +        let builder = generateCommandLineBuilder ()
  +        builder.GetCapturedArguments() |> Seq.fold(fun acc f -> acc + Environment.NewLine + f) ""
   
       // expose this to internal components (for nunit testing)
       member internal fsc.InternalGenerateCommandLineCommands() =
  
positive.code: open Microsoft.FSharp.Core.ReflectionAdapters
  #endif
  
  type FscCommandLineBuilder() =
      // In addition to generating a command-line that will be handed to cmd.exe, we also generate
      // an array of individual arguments.  The former needs to be quoted (and cmd.exe will strip the
      // quotes while parsing), whereas the latter is not.  See bug 4357 for background; this helper
  
negative.code: open System
  open System.Text
  open System.Diagnostics.CodeAnalysis
  open System.IO
  open System.Reflection
  open Microsoft.Build.Framework
  open Microsoft.Build.Utilities
  