63
votes

I've encountered a problem in expression evaluator of visual studio 2015 that says "Internal error in the expression evaluator", after some investigations I found that this is caused by an assembly that is loaded using reflection. This assembly wouldn't throw any exceptions but after that, vs exp evaluator will fail. This is not the only assembly that I load, there are some good working ones that don't influent the evaluator.

To overcome this issue I had to check 'Menu > options > debugging > Use Managed Compatibility Mode' but this disables the 'Edit & Continue' feature, what can I do?

Properties of the causer assembly:

  • its name is the same as the main assembly (i changed its name but nothing happened)
  • all of my projects are using dotNet 4.5
  • all root namespaces are same (all of the assemblies are so)

Thanks!

10
I´m having the same problem Legacy option didn´t fix it.Fritjof Berggren
The same happens to me when trying to test a Web API 2 controller...Marcus
I have a similar problem when debugging c++ cli. For me, it starts after I use SqlCommand::Open (does not depend if in the same assembly or in another one). Turning on managed compatibility mode is not an option for me, because then natvis does not work any more, and I cannot inspect for instance stl collections, I use in the native part.derpirscher
I had to uncheck both options to get rid of the error using vs 2017goku_da_master

10 Answers

78
votes

That sounds like a bug in the expression evaluator. For a better workaround, instead of checking "Use Managed Compatibility Mode", check "Use the legacy C# and VB expression evaluators". This should enable you to continue using Edit and Continue as well as other features added within the last few releases.

In terms of the "Internal error in expression evaluator", can you please open an issue by going to Help -> Send Feedback -> Report a problem? That will help us fix the problem in future releases.

36
votes

Just extending on the solution provided by Patrick Nelson. For Visual Studio 2015+ as inquired, the steps are as follows.

If you're debugging at the moment, this option will be unavailable. Stop the debugger.

Go to Tools -> Options

VS Options

and here under the Options select Debug -> General and scroll down to find the ...legacy C# expression.. option:

VS Options Debug Legacy options

More information is provided here:

Switching to Managed Compatibility Mode

Note: There are also some serious drawbacks that occur from switching to the legacy mode. Especially Runtime Reflection of the implemented Interfaces becomes almost an impossibility or extremely inconvenient. There are also other Reflection methods which will throw errors.

5
votes

I finally figured out what created this problem in my Visual Studio!

The quick fix is to delete the debug object favorites from the "Documents/Visual Studio xx/Visualizers" folder and restart Visual Studio.

enter image description here When you "pin" a variable in the debugger, Visual Studio saves a 'favorite' json object for it.

It appears that there is a bug in Visual Studio which corrupts the 'favorite' for some child variables that are dynamic in nature (not exactly sure of the conditions though). enter image description here

4
votes

For me checking "Use Managed Compatibility Mode" option worked. I was also seeing question marks when hovering over variables, instead of properties and values

2
votes

I resolved this issue by simply resetting my visual studio settings by going to: to Tools->Import and Export Settings and selecting to reset to default settings

1
votes

In my case I was trying to evaluate lambda expression on List<> and had such error ("Internal error in the expression evaluator"). I was using VS2015, so lambda expressions were allowed. It turns out expression evaluator was lacking of Linq library. I added

using System.Linq;

to my current class and voilà! Lambda evaluated.

1
votes

I encountered the "internal error in the expression evaluator" error when I was debugging in release mode instead of in debug mode. I had changed it to Release when publishing to production and forgot to change it back to Debug.

Release Mode

Debug Mode

1
votes

I had the same issue with VS2019. I ended up deleting my Documents/Visual Studio 2019 folder. Hope this might help someone, one day. Cost me a day.

PS. Probably not required to delete all, and of course not your projects (if they're in there), but in my case, everything in there was autogenerated by VS.

I of course tried all solutions mentioned here, and even reinstalling VS didn't work. Refactoring the class to another name was the 'trigger' which made me think there must be some cache, despite cleaning symbols and such didnt work.

0
votes

Check your use of the [DebuggerBrowsable] attribute; I found a minimal case in VisualStudio 2017 15.5 and posted it here.

In this particular case, the expression evaluator (EE) crash appears related to the [DebuggerBrowsable] attribute applied to a property overriding a field of the same name. This will account for some percentage of the cases that people are experiencing out there, but there's no way of knowing how many are due to this specific issue until it gets fixed.

The full and complete demonstration example is shown in the image (and included below for good measure)

enter image description here

Machine-readable copy of the code in the 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
votes

In my case, I had 2 same dll files in 2 different folders (seems, one dll was not correct). Deleting the .dll and rebuilding solution solved my issue.