.net framework 4.0环境下遇到版本不同编译不通过的解决办法
?????? 本文內容:
?????? 1.問題引出
?????? 2.問題解決
???????3.原因分析
?????? 最近部門的開發環境都更新到了WIN7+.NET framework4+VS2010上,在體驗新技術和新環境帶給我們提高效率的方式方法的同時也帶來了一些兼容性的問題;這幾天項目閑暇時在研究SQLite,在做實驗的時候碰到個問題,代碼編譯通過執行時反復異常中斷,查到后面原來是SQLite.dll是在framework2.0環境下編譯的而現在的運行環境是framework4.0,所以就出現了運行異常,如圖:
由于以后的開發過程中,可能會引用一些第三方的組件,有可能是老的framework版本下編譯的,同樣會出現此類的問題,所以在本文中提供一個解決辦法和說明造成此問題的原因。
查閱了相關資料,stackoverflow.com上建議在config文件中增加配置:
1?<startup?useLegacyV2RuntimeActivationPolicy="true">?
2???<supportedRuntime?version="v4.0"/>?
3?</startup>
?
MSDN上也對此方法進行了闡述,參見http://msdn.microsoft.com/en-us/library/bbx34a2h(VS.100).aspx
但是使用此方法編譯后問題仍然沒有解決,但是問題可以明確鎖定為.net runtime環境的問題了。
?
1?????<startup?useLegacyV2RuntimeActivationPolicy="true">2?????????<supportedRuntime?version="v4.0"/>
3?????????<requiredRuntime?version="v4.0.30319"?/>
4?????</startup>
?
? 再次運行,問題解決。這下需要了解是什么原因造成的?
supportedRuntime標簽用來 具體說明應用程序支持的是哪個.framework運行時的版本;
requiredRuntime標簽用來 具體說明應用程序只支持1.0版本的公用語言運行時間。如果使用1.1版本或者后面的版本來編譯,應用程序必須使用<supportedRuntime>元素;
注意:
<supportedRuntime>必須通過1.1版本或后面的版本而編譯的應用程序來使用。只支持1.0版本的運行時間的應用程序必須使用<requiredRuntime>。
?????????? 再次查閱CLR Runtime版本的相關資料,引用以下CLR運行規則和各版本間關系匯總表格,如下:
規則:
??????????????? 1. CLR4.0及以上版本編譯的應用程序總是運行在應用程序所被編譯的CLR版本上;
????????????????2. CLR4.0以下版本編譯的應用程序優先運行在被編譯的CLR版本上,如果此版本不存在,則運行最新的小于CLR4.0的版本;?
匯總如下:
| EXE被編譯的CLR版本號 | 機器上安裝有CLR 1.1? | 機器上安裝有CLR 2.0? | 機器上安裝有CLR 4.0? | 結果 |
| 1.1 | 是 | 無所謂 | 無所謂 | 加載CLR 1.1 |
| 2.0 | 無所謂 | 是 | 無所謂 | 加載CLR 2.0 |
| 1.1 | 否 | 是 | 無所謂 | 加載CLR 2.0 |
| 1.1 | 否 | 否 | 是 | 失敗 |
| 2.0 | 無所謂 | 否 | 是 | 失敗 |
????????????至此我們就能很清楚的搞清各個CLR版本之間的聯系了。
?
?
??????????? 總結:
????????????????? 微軟每次版本升級都會造成一些新的問題的出現,早年從CLRv1.0到CLRv2.0曾經也造成很多的困惑,可能也是由于過大的組織造成不能面面俱到吧,希望在今后的版本升級中能真正做到無縫的版本聯接。
?
??????????? 鳴謝:
????????????????? 本文關于CLR版本的分析引用了微軟NET 4.0團隊張羿總結的各版本間的關系,在此感謝他給予我們的支持。
?
?
轉載時,請注明本文來源:www.cnblogs.com/tmywu
?
作者: 淘米部落
聯系郵箱:tommywu23@gmail.com
???????????
?
轉載于:https://www.cnblogs.com/tmywu/archive/2010/06/01/1748336.html
總結
以上是生活随笔為你收集整理的.net framework 4.0环境下遇到版本不同编译不通过的解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于java.nio.Buffer的AP
- 下一篇: ASP.NET 开发实践--性能与缓存