"표현식 평가 기의 내부 오류"
Visual Studio 2015의 표현식 평가 기에서 "표현식 평가 기의 내부 오류"라는 문제가 발생했습니다. 몇 가지 조사를 한 후 리플렉션을 사용하여로드 된 어셈블리로 인해 발생하는 것으로 나타났습니다. 이 어셈블리는 예외를 throw하지 않지만 그 후에는 vs exp 평가자가 실패합니다. 이것은 내가로드하는 유일한 어셈블리가 아니며 평가자에게 영향을주지 않는 좋은 작동하는 어셈블리가 있습니다.
이 문제를 극복하기 위해 '메뉴> 옵션> 디버깅> 관리되는 호환 모드 사용'을 확인해야하는데 '편집 및 계속'기능이 비활성화됩니다. 어떻게해야합니까?
원인자 어셈블리의 속성 :
- 그 이름은 주 어셈블리와 동일합니다 (이름을 변경했지만 아무 일도 일어나지 않았습니다)
- 내 모든 프로젝트에서 dotNet 4.5를 사용하고 있습니다.
- 모든 루트 네임 스페이스가 동일 함 (모든 어셈블리가 동일 함)
감사!
표현식 평가 기의 버그처럼 들립니다. 더 나은 해결 방법을 보려면 "관리되는 호환성 모드 사용"을 선택하는 대신 "레거시 C # 및 VB 식 평가자 사용"을 선택하십시오. 이렇게하면 최근 몇 개 릴리스에 추가 된 다른 기능뿐만 아니라 편집하고 계속하기를 계속 사용할 수 있습니다.
"표현식 평가 기의 내부 오류"와 관련하여 도움말-> 의견 보내기-> 문제보고로 이동하여 문제를 열 수 있습니까? 그러면 향후 릴리스에서 문제를 해결하는 데 도움이됩니다.
Patrick Nelson이 제공 한 솔루션을 확장합니다 . 조회 된 Visual Studio 2015+의 경우 단계는 다음과 같습니다.
도구 -> 옵션으로 이동하십시오.
옵션 아래에서 디버그 -> 일반을 선택 하고 아래로 스크롤하여 ... legacy C # 표현식 을 찾습니다 .. 옵션 :
자세한 정보는 여기에서 제공됩니다.
참고 : 레거시 모드로 전환 할 때 발생하는 몇 가지 심각한 단점도 있습니다. 특히 구현 된 인터페이스의 런타임 리플렉션 은 거의 불가능하거나 매우 불편합니다. 오류를 발생시키는 다른 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
'programing tip' 카테고리의 다른 글
Java의 내부 클래스에 열거 형을 만들 수없는 이유는 무엇입니까? (0) | 2021.01.07 |
---|---|
Node.js 또는 Express.js REST API 문서 생성기 (0) | 2021.01.07 |
Hackintosh에서 iPhone 개발 (0) | 2021.01.07 |
PHP 생성자의 목적 (0) | 2021.01.07 |
C # 정규식은 예제와 일치 (0) | 2021.01.07 |