Question

j'observe un comportement étrange lors de l'utilisation du F # interpréteur interactif.

L'exécution du code suivant:

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);;

résultats dans un FileLoadException fsi capture même si le paramètre throwOnError est défini sur false. La première fois, elle renvoie une deuxième fois nulle l'exception se produit.

Exécution du même code dans un programme (non interactive) régulière des résultats dans le comportement attendu où getType = null.

Est-ce que FSI.exe arrête sur toutes les exceptions? Est-il possible de définir FSI d'ignorer ces exceptions?

Était-ce utile?

La solution

Basé sur la trace de la pile, il ressemble à FSI dans sa accrochait la résolution de l'Assemblée de AppDomain. Malheureusement FSI est de lancer l'exception lui-même quand il ne peut pas résoudre l'ensemble - ce n'est pas généré par un code-cadre, et c'est la raison pour laquelle votre paramètre throwOnError n'est pas respecté - l'exception de FSI est juste propageait vers le haut et étant alors pris au haut niveau. Pour moi, cela ressemble à un bogue dans FSI, mais il se peut que les crochets disponibles dans le processus de résolution de l'Assemblée du AppDomain ne fournissent pas suffisamment d'informations FSI pour déterminer quand il est normal de jeter.

EDIT - Si vous regardez dans les fsi.fs fichier source (inclus dans la distribution F # dans la source / FSharp / répertoire Fsi), vous pouvez voir où ce gestionnaire est accroché (il est en le module MagicAssemblyResolution effroyablement nommé). Il semble que le FSI doit accrocher dans le processus de résolution afin que les assemblées enregistrées via la directive #r peut être trouvée, mais je ne peux pas dire à un coup d'œil où les choses vont mal, ou pourquoi pas une exception est levée jusqu'au sommet niveau la première fois que vous essayez de résoudre un ensemble non valide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top