«Erreur interne dans l’évaluateur d’expression»

J’ai rencontré un problème dans l’évaluateur d’expression du studio visuel 2015 qui dit “Erreur interne dans l’évaluateur d’expression”, après quelques investigations, j’ai trouvé que cela était dû à un assemblage chargé en utilisant la reflection. Cet assemblage ne jettera aucune exception, mais après cela, vs évaluateur échouera. Ce n’est pas le seul assemblage que je charge, il y en a qui fonctionnent bien et qui n’influencent pas l’évaluateur.

Pour surmonter ce problème, j’ai dû cocher la case “Menu> options> débogage> Utiliser le mode de compatibilité géré”, mais cela désactive la fonctionnalité “Modifier et continuer”. Que puis-je faire?

Propriétés de l’assemblage causant:

  • son nom est le même que celui de l’assemblage principal (j’ai changé de nom mais rien ne s’est passé)
  • tous mes projets utilisent dotNet 4.5
  • tous les espaces de noms racine sont identiques (tous les assemblages le sont)

Merci!

Cela ressemble à un bogue dans l’évaluateur d’expression. Pour une solution plus efficace, au lieu de cocher “Utiliser le mode de compatibilité géré”, cochez la case “Utiliser les évaluateurs d’expression C # et VB hérités”. Cela devrait vous permettre de continuer à utiliser Modifier et Continuer ainsi que d’autres fonctionnalités ajoutées dans les dernières versions.

En termes de “Erreur interne dans l’évaluateur d’expression”, pouvez-vous s’il vous plaît ouvrir un problème en allant dans Aide -> Envoyer des commentaires -> Signaler un problème? Cela nous aidera à résoudre le problème dans les futures versions.

En prolongement de la solution proposée par Pasortingck Nelson . Pour Visual Studio 2015+, les étapes sont les suivantes.

Allez dans Outils -> Options Options VS

et ici, sous Options, sélectionnez Déboguer -> Général et faites défiler vers le bas pour trouver la … expression C # héritée .. option:

Options de débogage des options VS

Plus d’informations sont fournies ici:

Passage au mode de compatibilité géré

Remarque: le passage au mode hérité présente également de sérieux inconvénients. Surtout la Runtime Reflection des interfaces implémentées devient presque impossible ou extrêmement gênant. Il y a aussi d’autres méthodes de reflection qui vont jeter des erreurs.

J’ai rencontré l’erreur “erreur interne dans l’évaluateur d’expression” lorsque j’étais en train de déboguer en mode de publication plutôt qu’en mode débogage. Je l’avais changé en Release lors de la publication en production et j’ai oublié de le remplacer par Debug.

Mode de libération

Mode débogage

Pour moi, l’option “Utiliser le mode de compatibilité géré” a fonctionné. Je voyais également des points d’interrogation lors du survol des variables, plutôt que des propriétés et des valeurs

Dans mon cas, j’essayais d’évaluer l’expression lambda sur List <> et présentais une telle erreur (“Erreur interne dans l’évaluateur d’expression”). J’utilisais VS2015, donc les expressions lambda étaient autorisées. Il s’avère que l’évaluateur d’expression manquait de la bibliothèque Linq. J’ai ajouté

using System.Linq; 

à ma classe actuelle et voilà! Lambda évalué.

Vérifiez votre utilisation de l’atsortingbut [DebuggerBrowsable] ; J’ai trouvé un cas minimal dans VisualStudio 2017 15.5 et l’a posté ici .

Dans ce cas particulier, le crash de l’évaluateur d’expression (EE) apparaît lié à l’atsortingbut [DebuggerBrowsable] appliqué à une propriété remplaçant un champ du même nom. Cela représentera un certain pourcentage des cas rencontrés par les utilisateurs, mais il est impossible de savoir combien de cas sont dus à ce problème spécifique avant qu’il soit résolu.

L’exemple de démonstration complet et complet est montré dans l’image (et inclus ci-dessous pour faire bonne mesure)

entrer la description de l'image ici

Copie lisible à la machine du code dans l’image:

 using System; using System.Diagnostics; class Program { static void Main() => new _derived(); } abstract class _base { [DebuggerBrowsable(DebuggerBrowsableState.Never)] public Object trace; }; class _derived : _base { public _derived() => Debugger.Break(); // <-- vs2017 EE crash when stopped here [DebuggerBrowsable(DebuggerBrowsableState.Never)] new public Object trace => base.trace; } 

J’ai résolu ce problème en réinitialisant simplement mes parameters visuels de studio en allant dans: Outils -> Paramètres d’importation et d’exportation et en sélectionnant pour rétablir les parameters par défaut

Dans mon cas, j’ai eu 2 mêmes fichiers dll dans 2 dossiers différents (semble, un dll n’était pas correct). La suppression de la solution .dll et la solution de reconstruction ont résolu mon problème.