anchor.diff:                  let asm = Assembly.LoadFrom dllFile
                   if state.ContainsKey asmName then state.Remove asmName |> ignore
                   state.Add(asmName, {originalSource=metaprogram; assemblyLocation = dllFile; assembly = asm; metaprogramParams = metaprogramParams })
  -                File.AppendAllText("I:\\mixin.tmp", sprintf "good exit on thread %A %A\n" System.Threading.Thread.CurrentThread.ManagedThreadId id) 
                   Good asm
               | _ -> 
  -                File.AppendAllText("I:\\mixin.tmp", sprintf "bad exit on thread %A %A\n" System.Threading.Thread.CurrentThread.ManagedThreadId id) 
                   Bad (new Exception("metaprogram failed"))
           with
           | ex -> Bad (Exception(sbErr.ToString(), ex))
  
positive.code: type ResponseMessage =
      | Good of Assembly
      | Bad of Exception
  //
  //type CompileMessage =
  //    | Compile of source : string * location : string * dynamic : bool * AsyncReplyChannel<ResponseMessage>
  //    | GetBytes of assemblyName : string * AsyncReplyChannel<byte[]>
  //    
  
  type MixinData = 
      { originalSource : string // original metaprogram before any modifications
  
negative.code:                         @ references
                          |> List.toArray
                                 
          let fsi = getFsiSession()     
          try       
              fsi.EvalInteraction metaprogram                            
  