VS2017 Common Language Runtime detected an invalid program

  • 726
  • 0
  • 2018-08-24

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使用, 改成一個實名類別就可解決了。