VS2017 Common Language Runtime detected an invalid program
最近有支程式在安裝VS2017後, 本機執行會發生Common Language Runtime detected an invalid program的錯誤
就算設中斷點會停在某個method的呼叫點前面,一頭霧水。
後來發現做windows更新, 若有將framework更新更高版本, 那個環境執行該程式也會這樣。
就想說一定是底層framework有動了什麼手腳。
最起初有做了Peverify 去驗證該dll, 沒有錯誤驗證成功。
這樣就更納悶阿, 後來想到JIT
搜尋後發現下面那篇文章
https://docs.microsoft.com/zh-tw/dotnet/framework/migration-guide/mitigation-new-64-bit-jit-compiler
看到這個就中了
原來4.6在執行階段會包含新的JIT編輯器
據文章說在config加上 <uselegacyjit> 的設定就可以轉換回舊的JIT 或是改機碼
但其實問題的根在程式碼, 該method裡有dynamic, 大量屬性的anonymous type
後來是將anonymous type使用, 改成一個實名類別就可解決了。