.NET Framework 4.0不能用sqlite的問題解決方法

這是由於.NET Framework 4.0中把版本號所有統一成4.0了,而這個SQLite provider是.NET 2.0的。html

解決方法是在app.config的configuration節點下加入如下節點:app


<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>

個人原來是這樣的
ide

<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>

如下是網上找的資料,比較詳細的分析(http://www.poluoluo.com/jzxy/201305/207264.html)ui

查閱了相關資料,stackoverflow.com上建議在config文件中增長配置:spa

<startup useLegacyV2RuntimeActivationPolicy="true"> 
<supportedRuntime version="v4.0"/> 
</startup>
.net

MSDN上也對此方法進行了闡述,參見http://msdn.microsoft.com/en-us/library/bbx34a2h(VS.100).aspxcode

可是使用此方法編譯後問題仍然沒有解決,可是問題能夠明確鎖定爲.net runtime環境的問題了。orm

<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
<requiredRuntime version="v4.0.30319" />
</startup>
xml

再次運行,問題解決。這下須要瞭解是什麼緣由形成的?
supportedRuntime標籤用來 具體說明應用程序支持的是哪一個.framework運行時的版本;
requiredRuntime標籤用來 具體說明應用程序只支持1.0版本的公用語言運行時間。若是使用1.1版本或者後面的版原本編譯,應用程序必須使用<supportedRuntime>元素;
注意:
<supportedRuntime>必須經過1.1版本或後面的版本而編譯的應用程序來使用。只支持1.0版本的運行時間的應用程序必須使用<requiredRuntime>。htm

再次查閱CLR Runtime版本的相關資料,引用如下CLR運行規則和各版本間關係彙總表格,以下:
規則:
1. CLR4.0及以上版本編譯的應用程序老是運行在應用程序所被編譯的CLR版本上;
2. CLR4.0如下版本編譯的應用程序優先運行在被編譯的CLR版本上,若是此版本不存在,則運行最新的小於CLR4.0的版本; 
彙總以下:

至此咱們就能很清楚的搞清各個CLR版本之間的聯繫了。

總結:微軟每次版本升級都會形成一些新的問題的出現,早年從CLRv1.0到CLRv2.0曾經也形成不少的困惑,可能也是因爲過大的組織形成不能面面俱到吧,但願在從此的版本升級中能真正作到無縫的版本聯接。

相關文章
相關標籤/搜索