anchor.diff:      not pcdfs.IsEmpty
   
   let precompile log path output = either {
  -    let! pcdfs = getPrecompilableGrammars log ["Chiron.dll"; "FsLexYacc.Runtime.dll"] path
  +    let pcdfs, wr = getPrecompilableGrammars log ["Chiron.dll"; "FsLexYacc.Runtime.dll"] path
  +    let! pcdfs = pcdfs
  +    #if !NET472
  +    ensureUnloaded log wr
  +    #endif
   
       do!
           pcdfs
  
positive.code:                 typeof<DynamicDiscoverer>.FullName,
                  [|logw|])
              |> unbox<DynamicDiscoverer>
          theHeroicPrecompiler.GetPrecompilableGrammars path
      finally
          AppDomain.Unload(ad)
      #else
      let mutable alc = FarkleAwareAssemblyLoadContext(path) :> AssemblyLoadContext
      try
          let asm = alc.LoadFromAssemblyPath path
          for r in references do
              r |> Path.GetFullPath |> alc.LoadFromAssemblyPath |> ignore
          getPrecompilableGrammarsImpl asm logw
      finally
          let wr = WeakReference(alc)
          alc.Unload()
          alc <- null
          ensureUnloaded log wr
      #endif
  
  let weaveAssembly pcdfs (asm: AssemblyDefinition) =
  
negative.code:             // This is great news.
              log.Debug("The assembly context was not collected after {GCTries} attempts! \
  Writing to the assembly might fail.", 10 - i)
          else
              log.Debug("Assembly context unloaded after {GCTries} tries.", 10 - i)
  #endif
  
  [<MethodImpl(MethodImplOptions.NoInlining)>]
  