Frage

Ich beobachte ein seltsames Verhalten, wenn die F # interaktiven Interpreter.

Ausführen des folgenden Code:

let getType1 = Type.GetType("namespace.does.not.exist, doesntexistlib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",false);;
let getType2 = Type.GetType("namespace.does.not.exist, doesntexistlib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",false);;

Ergebnisse in fsi ein Fileloadexception obwohl die throwOnError Parameter auf false gesetzt ist zu kontrollieren. Das erste Mal, es gibt ein Null zweites Mal die Ausnahme auftritt.

Ausführen den gleichen Code in einem regelmäßigen Programm (nicht interaktiv) ergibt die erwartete Verhalten, wo getType = null.

Hat FSI.exe auf alle Ausnahmen stoppen? Ist es möglich, FSI zu setzen, diese Ausnahmen zu ignorieren?

War es hilfreich?

Lösung

Basierend auf dem Stack-Trace, sieht es aus wie FSI seine AppDomain Versammlung Auflösung Einhaken in. Leider wirft FSI die selbst Ausnahme, wenn es nicht die Versammlung auflösen kann - dies nicht durch Framework-Code erzeugt wird, und das ist, warum Ihr throwOnError Parameter nicht eingehalten wird - FSI Ausnahme nur nach oben ausbreitet und dann auf die gefangen Höchststufe. Für mich sieht das wie ein Fehler in FSI, aber es kann sein, dass die zur Verfügung stehenden Haken in dem Montageauflösungsprozess des AppDomain nicht FSI bieten genügend Informationen, um zu bestimmen, wenn es okay ist, zu werfen.

Bearbeiten - Wenn Sie die Quelldatei fsi.fs Blick in (in der Fis-Distribution in der Quelle / FSharp / Fsi-Verzeichnis) können Sie sehen, wo dieser Handler angeschlossen ist (es ist in der erschreckend namens MagicAssemblyResolution Modul). Es scheint, dass FSI in den Lösungsprozess muss Haken, so dass Baugruppen über die #r Richtlinie registriert sind, können gefunden werden, aber ich kann auf einen Blick nicht sagen, wo die Dinge schief gehen, oder warum keine Ausnahme ist den ganzen Weg nach oben geworfen nivellieren Sie das erste Mal versuchen, eine ungültige Versammlung aufzulösen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top