programing tip

"표현식 평가 기의 내부 오류"

itbloger 2021. 1. 7. 07:41
반응형

"표현식 평가 기의 내부 오류"


Visual Studio 2015의 표현식 평가 기에서 "표현식 평가 기의 내부 오류"라는 문제가 발생했습니다. 몇 가지 조사를 한 후 리플렉션을 사용하여로드 된 어셈블리로 인해 발생하는 것으로 나타났습니다. 이 어셈블리는 예외를 throw하지 않지만 그 후에는 vs exp 평가자가 실패합니다. 이것은 내가로드하는 유일한 어셈블리가 아니며 평가자에게 영향을주지 않는 좋은 작동하는 어셈블리가 있습니다.

이 문제를 극복하기 위해 '메뉴> 옵션> 디버깅> 관리되는 호환 모드 사용'을 확인해야하는데 '편집 및 계속'기능이 비활성화됩니다. 어떻게해야합니까?

원인자 어셈블리의 속성 :

  • 그 이름은 주 어셈블리와 동일합니다 (이름을 변경했지만 아무 일도 일어나지 않았습니다)
  • 내 모든 프로젝트에서 dotNet 4.5를 사용하고 있습니다.
  • 모든 루트 네임 스페이스가 동일 함 (모든 어셈블리가 동일 함)

감사!


표현식 평가 기의 버그처럼 들립니다. 더 나은 해결 방법을 보려면 "관리되는 호환성 모드 사용"을 선택하는 대신 "레거시 C # 및 VB 식 평가자 사용"을 선택하십시오. 이렇게하면 최근 몇 개 릴리스에 추가 된 다른 기능뿐만 아니라 편집하고 계속하기를 계속 사용할 수 있습니다.

"표현식 평가 기의 내부 오류"와 관련하여 도움말-> 의견 보내기-> 문제보고로 이동하여 문제를 열 ​​수 있습니까? 그러면 향후 릴리스에서 문제를 해결하는 데 도움이됩니다.


Patrick Nelson이 제공 한 솔루션을 확장합니다 . 조회 된 Visual Studio 2015+의 경우 단계는 다음과 같습니다.

도구 -> 옵션으로 이동하십시오. VS 옵션

옵션 아래에서 디버그 -> 일반을 선택 하고 아래로 스크롤하여 ... legacy C # 표현식 을 찾습니다 .. 옵션 :

VS 옵션 디버그 레거시 옵션

자세한 정보는 여기에서 제공됩니다.

관리되는 호환성 모드로 전환

참고 : 레거시 모드로 전환 할 때 발생하는 몇 가지 심각한 단점도 있습니다. 특히 구현 된 인터페이스의 런타임 리플렉션 은 거의 불가능하거나 매우 불편합니다. 오류를 발생시키는 다른 Reflection 메서드도 있습니다.


나를 위해 "관리되는 호환성 모드 사용"옵션이 작동했습니다. 또한 속성 및 값 대신 변수 위로 마우스를 가져갈 때 물음표가 표시되었습니다.


제 경우에는 List <>에서 람다 식을 평가하려고했는데 이러한 오류가 발생했습니다 ( "식 평가 기의 내부 오류"). VS2015를 사용하고 있었으므로 람다식이 허용되었습니다. 표현식 평가자에는 Linq 라이브러리가 부족한 것으로 나타났습니다. 나는 추가했다

using System.Linq;

내 현재 수업과 voilà! Lambda가 평가되었습니다.


디버그 모드가 아닌 릴리스 모드에서 디버깅 할 때 "식 평가 기의 내부 오류"오류가 발생했습니다. 프로덕션에 게시 할 때 릴리스로 변경했고 디버그로 다시 변경하는 것을 잊었습니다.

릴리스 모드

디버그 모드


도구-> 설정 가져 오기 및 내보내기로 이동하고 기본 설정으로 재설정하도록 선택하여 Visual Studio 설정을 재설정하여이 문제를 해결했습니다.


[DebuggerBrowsable]속성 사용을 확인하십시오 . VisualStudio 2017 15.5에서 최소한의 사례를 찾아 여기에 게시했습니다 .

이 특정 경우 [DebuggerBrowsable]에는 같은 이름의 필드를 재정의하는 속성에 적용된 특성 과 관련된 EE (표현식 평가 기) 충돌이 나타납니다 . 이것은 사람들이 외부에서 경험하는 사례의 일부 를 설명 할 것이지만,이 문제가 해결 될 때까지이 특정 문제로 인해 얼마나 많은 경우인지 알 수있는 방법이 없습니다.

전체 및 완전한 데모 예제가 이미지에 표시됩니다 (좋은 측정을 위해 아래에 포함됨).

여기에 이미지 설명 입력

이미지에있는 코드의 기계 판독 가능 사본 :

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

제 경우에는 2 개의 다른 폴더에 2 개의 동일한 dll 파일이 있습니다 (하나의 dll이 올바르지 않은 것 같습니다). .dll을 삭제하고 솔루션을 다시 빌드하면 문제가 해결되었습니다.

참조 URL : https://stackoverflow.com/questions/34545354/internal-error-in-the-expression-evaluator

반응형