質問
私はいくつかの奇妙な行動を観察しています。
次のコードを実行します:
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);;
throwOnErrorパラメータがfalseに設定されていてもFileLoadExceptionをキャッチFSIでの結果。初めてそれは例外が発生ヌル二度目を返す。
getType = NULL 予想される動作で正規プログラムで同じコードを実行する(しない対話的)結果
FSI.exeはすべての例外で停止していますか?それは、これらの例外を無視するFSIを設定することは可能ですか?
解決
スタックトレースに基づいて、それが見えます。これは、フレームワークのコードによって生成されていない、そしてそれはあなたのthrowOnError
パラメータが尊重されていない理由です - - FSIの例外がちょうど上向きに伝播していると、その後に巻き込まれることはアセンブリを解決できないとき残念なことにFSIは、自分自身を例外をスローしていますトップレベル。私にとって、これはFSIのバグのように見えますが、それはそれは投げても大丈夫ですときのAppDomainのアセンブリ解決プロセスで利用可能なフックが決定するのに十分な情報をFSIを提供していないということかもしれません。
編集 - あなたは(ソース/ fsharp / FSIディレクトリ内のF#のディストリビューションに含まれている)ソースファイルfsi.fsに見れば、このハンドラがフックアップされた場合、あなたが見ることができる(それは中です驚くほどという名前MagicAssemblyResolution
モジュール)。 FSIは#r
ディレクティブを経て登録されたアセンブリを見つけることができるように、解決プロセスにフックする必要があると表示されますが、私は物事がうまく行っている一目で伝えることができない、または、なぜ例外はずっとトップにスローされません無効なアセンブリを解決しようとする最初の時間を平準ます。