web-dev-qa-db-fra.com

"Erreur interne dans l'évaluateur d'expression"

J'ai rencontré un problème dans l'évaluateur d'expression de visual studio 2015 qui disait "Erreur interne dans l'évaluateur d'expression". Après quelques investigations, j'ai constaté que cela était dû à un assembly chargé en réflexion. Cette assemblée ne lève aucune exception, mais après cela, vs évaluateur échouera . Ce n’est pas la seule assemblée que je charge, il y en a de bonnes qui ne influencent pas l’évaluateur.

Pour résoudre ce problème, je devais cocher 'Menu> Options> Débogage> Utiliser le mode de compatibilité gérée', mais cela désactive la fonctionnalité 'Editer et continuer', que puis-je faire?

Propriétés de la cause Assemblage:

  • son nom est identique à celui de l'Assemblée principale (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 (toutes les assemblées le sont)

Merci!

50
Mehran Khazaeizadeh

Cela ressemble à un bug dans l'évaluateur d'expression. Pour une meilleure solution de contournement, au lieu de cocher la case "Utiliser le mode de compatibilité managé", cochez la case "Utiliser les évaluateurs d'expression C # et VB existants". Cela devrait vous permettre de continuer à utiliser Éditer et continuer, ainsi que d'autres fonctionnalités ajoutées au cours des dernières versions.

Pour ce qui est de "l'erreur interne dans l'évaluateur d'expression", pouvez-vous ouvrir un problème en allant dans Aide -> Envoyer un commentaire -> Signaler un problème? Cela nous aidera à résoudre le problème dans les prochaines versions.

65

En prolongeant la solution fournie par Patrick Nelson. Pour Visual Studio 2015+, les étapes sont les suivantes.

Allez dans Outils -> OptionsVS Options

et ici sous Options, sélectionnez Debug -> General et faites défiler vers le bas pour trouver l’option ... legacy C # expression ..

VS Options Debug Legacy options

Plus d'informations sont fournies ici:

Passage en mode de compatibilité gérée

Remarque: Le passage au mode hérité présente également de graves inconvénients. Surtout Runtime Reflection des interfaces implémentées devient presque impossible ou extrêmement gênant. Il existe également d'autres méthodes de réflexion qui génèrent des erreurs.

26
Lorenz Lo Sauer

Pour moi, cocher l'option "Utiliser le mode de compatibilité géré" a fonctionné. Je voyais aussi des points d'interrogation lorsque je survolais des variables au lieu de propriétés et de valeurs

3
Talha Anwer

J'ai rencontré l'erreur "Erreur interne dans l'expresseur 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'avais oublié de le remettre en Debug.

 Release Mode

 Debug Mode

1
MrsTapp

Vérifiez votre utilisation de l'attribut [DebuggerBrowsable]; J'ai trouvé un cas minime dans VisualStudio 2017 15.5 et l'ai posté ici .

Dans ce cas particulier, le crash de l'évaluateur d'expression (EE) apparaît lié à l'attribut [DebuggerBrowsable] appliqué à une propriété remplaçant un champ du même nom. Cela représentera quelques pourcent des cas que les gens rencontrent, mais il n'y a aucun moyen de savoir combien sont dus à ce problème spécifique jusqu'à ce qu'il soit résolu.

L'exemple de démonstration complet et complet est présenté dans l'image (et inclus ci-dessous pour une bonne mesure)

 enter image description here

Copie lisible par 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;
}
0
Glenn Slayden

Dans mon cas, j'avais deux fichiers DLL identiques dans deux dossiers différents (une DLL semble incorrecte) Supprimer le fichier .dll et reconstruire la solution a résolu mon problème.

0
constructor

Dans mon cas, j'essayais d'évaluer l'expression lambda sur List <> et j'avais 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'expression évaluateur manquait de la bibliothèque Linq. J'ai ajouté 

using System.Linq;

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

0
pilak

J'ai résolu ce problème en réinitialisant simplement mes paramètres de Visual Studio en allant dans: dans Outils-> Paramètres d'importation et d'exportation et en sélectionnant pour restaurer les paramètres par défaut 

0
Brandon