문제를 이해하려고하는데 많은 부분을 읽었지만이 이상한 조합을 설명하는 리소스를 찾을 수없는 것 같습니다.StackFrame.GetFileLineNumber() 동작은 어셈블리에 따라 다릅니다. 플랫폼 및 최적화 플래그
실험 조금 나는에서 /를 anycpu를/x86 플랫폼에 대한 해제 및 건물 컴파일러 최적화 설정의 조합 StackFrame.GetFileLineNumber()의 동작을 변경 것으로 나타났습니다 후
난 왜 이해가 안 나는 다음 결과를 얻는 중 (내 x64 시스템에서)
Optimisations | Platform | Line Number Reported | Result
-------------------|---------------|-----------------------|----------
off | anycpu | 10 | Correct
off | x86 | 10 | Correct
on | anycpu | APPCRASH | WTF?
on | x86 | 12 | WTF?
아래의 코드는 문제를 재현합니다. 당신이 최적화를 켜면
csc /t:exe /debug+ /out:anycpu-optimisation-on.exe /platform:anycpu /optimize+ code.cs
csc /t:exe /debug+ /out:anycpu-optimisation-off.exe /platform:anycpu /optimize- code.cs
csc /t:exe /debug+ /out:x86-optimisation-on.exe /platform:x86 /optimize+ code.cs
csc /t:exe /debug+ /out:x86-optimisation-off.exe /platform:x86 /optimize- code.cs
내가 추가 할 경우는 MethodImpl 속성 다음, 그것은 가'[MethodImpl (MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining가)]를 anycpu를의 APPCRASH 해결' 이에 부합하는 것으로 보인다 무엇 인라이닝에 관한 한 AnyCPU에 대해 설명하지만 최적화가 비활성화 된 경우 줄 번호가 다른 이유는 여전히 설명하지 않습니다. – Xerxes
나는 그 차이점을 일리노이 또는 생성 된 PDB가 바이너리와 충돌하는 것을 막을 것이다. 그러나 나는 여기서 조금 추측하고있다. –