전체 메시지 텍스트: 'function' 함수를 평가하는 데 시간이 초과되었으며 안전하지 않은 방식으로 중단해야 했습니다. 이 문제로 인해 대상 프로세스가 손상될 수 있습니다.
.NET 개체의 상태를 보다 쉽게 검사할 수 있도록 디버거는 디버그된 프로세스에서 다른 코드(일반적으로 속성 getter 메서드 및 ToString 함수)를 실행하도록 자동으로 강제합니다. 대부분의 시나리오에서 이러한 함수는 빠르게 완료되고 디버깅을 더 쉽게 만듭니다. 그러나 디버거는 샌드박스에서 애플리케이션을 실행하지 않습니다. 따라서 응답을 중지하는 네이티브 함수를 호출하는 속성 getter 또는 ToString 메서드는 복구할 수 없는 긴 시간 제한으로 이어질 수 있습니다. 이 오류 메시지가 발생하면 이 오류가 발생했습니다.
이 문제의 일반적인 이유 중 하나는 디버거가 속성을 평가할 때 검사되는 스레드만 실행할 수 있기 때문입니다. 따라서 속성이 다른 스레드에서 디버그된 애플리케이션 내에서 실행되기를 기다리고 있고 .NET 런타임이 인터럽트할 수 없는 방식으로 대기하는 경우 이 문제가 발생합니다.
이 오류를 해결하려면
이 문제에 대한 몇 가지 가능한 해결 방법은 다음 섹션을 참조하세요.
해결 방법 #1: 디버거가 getter 속성 또는 ToString 메서드를 호출하지 못하도록 방지
오류 메시지는 디버거가 호출하려고 시도한 함수의 이름을 알려줍니다. 이 함수를 수정할 수 있는 경우 디버거가 속성 getter 또는 ToString 메서드를 호출하지 못하도록 할 수 있습니다. 다음 중 하나를 시도합니다.
메서드를 속성 getter 또는 ToString 메서드 외에 다른 코드 형식으로 변경하면 문제가 사라지게 됩니다.
-또는-
(ToString의 경우) 형식에 DebuggerDisplay 특성을 정의하면 디버거가 ToString 이외의 항목을 평가하도록 할 수 있습니다.
-또는-
(속성 getter의 경우) System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never) 특성을 속성에 적용합니다. API 호환성을 위해 속성을 유지해야 하는 메서드가 있는 경우 유용할 수 있지만 실제로는 메서드여야 합니다.
해결 방법 #2: 대상 코드가 디버거에 평가를 중단하도록 요청하도록 합니다.
오류 메시지는 디버거가 호출하려고 시도한 함수의 이름을 알려줍니다. 속성 getter 또는 ToString 메서드가 경우에 따라 올바르게 실행되지 않는 경우, 특히 코드에서 코드를 실행하기 위해 다른 스레드가 필요한 경우 구현 함수는 System.Diagnostics.Debugger.NotifyOfCrossThreadDependency 를 호출하여 디버거에 함수 평가를 중단하도록 요청할 수 있습니다. 이 솔루션을 사용하면 이러한 함수를 명시적으로 평가할 수 있지만 기본 동작은 NotifyOfCrossThreadDependency 호출이 발생할 때 실행이 중지된다는 것입니다.
해결 방법 #3: 모든 암시적 평가 사용 안 함
이전 솔루션에서 문제를 해결하지 않는 경우 속성 평가 사용 및 기타 암시적 함수 호출 옵션을 사용하지 않도록 설정할 수 있습니다. 이 구성은 대부분의 암시적 함수 평가를 사용하지 않도록 설정하며 문제를 해결해야 합니다.
도구>옵션 창에서 모든 설정>디버깅> 섹션을 확장하고 속성 평가 사용 및 기타 암시적 함수 호출 확인란의 선택을 취소합니다.
도구>옵션 대화 상자에서 디버깅> 섹션을 확장하고 속성 평가 사용 및 기타 암시적 함수 호출 확인란의 선택을 취소합니다.
솔루션 #4: 타사 개발자 도구와의 호환성 확인
Resharper를 사용하는 경우 제안에 대한 이 문제를 참조하세요.