web-dev-qa-db-fra.com

comment réparer "'System.AggregateException' s'est produite dans mscorlib.dll"

Je reçois un tel problème dans le débogueur et le programme cesse de s’exécuter. Le débogueur ne me montre pas la ligne, donc je ne sais pas quoi corriger.

Une exception non gérée du type 'System.AggregateException' s'est produite dans mscorlib.dll

Informations complémentaires: L'exception ou les exceptions d'une tâche n'ont pas non plus été observées en attendant la tâche ou en accédant à sa propriété Exception. Comme un Par conséquent, l’exception non observée a été redéfinie par le thread du finaliseur.

Impossible d'obtenir la valeur de local ou l'argument '', ce qui n'est pas le cas disponible à ce pointeur d’instruction, peut-être parce que cela a été optimisé loin. System.Threading.Tasks.TaskExceptionHolder

Comment résoudre mon problème?

J'ai aussi trouvé cette question qui est assez similaire Impossible d'obtenir une valeur locale ou un argument car elle n'est pas disponible pour ce pointeur d'instruction, probablement parce qu'elle a été optimisée

44
javapowered

Comme le message l'indique, vous avez une tâche qui génère une exception non gérée.

Activez Pause sur toutes les exceptions (débogage, exceptions) et réexécutez le programme.
Ceci vous montrera l'exception originale quand elle a été lancée en premier lieu.


(commentaire ajouté): Dans VS2015 (ou ci-dessus). Sélectionnez Déboguer> Options> Débogage> Général et désélectionnez l'option "Activer uniquement mon code".

49
SLaks

Vous pouvez gérer l'exception directement afin que votre programme ne se bloque pas (capture de la variable AggregateException). Vous pouvez également regarder l’exception interne, cela vous donnera une explication plus détaillée de ce qui ne va pas:

try {
    // your code 
} catch (AggregateException e) {

}
8
Darren

La réponse acceptée fonctionnera si vous pouvez facilement reproduire le problème. Cependant, il est recommandé de détecter les exceptions (et la journalisation) exécutées dans une tâche. Sinon, votre application se bloquera si quelque chose d'inattendu se produit dans la tâche.

Task.Factory.StartNew(x=>
   throw new Exception("I didn't account for this");
)

Cependant, si nous faisons cela, au moins l'application ne plante pas.

Task.Factory.StartNew(x=>
   try {
      throw new Exception("I didn't account for this");
   }
   catch(Exception ex) {
      //Log ex
   }
)
4
helios456

Dans mon cas, j'ai rencontré ce problème en utilisant Edge.js. Tout le problème était une erreur de syntaxe JavaScript dans une définition de fonction C # Edge.js.

0
Nono