解決.net framework 4.0環(huán)境下遇到版本不同編譯不通過(guò)的方法詳解
本文內(nèi)容:
1.問(wèn)題引出
2.問(wèn)題解決
3.原因分析
最近部門(mén)的開(kāi)發(fā)環(huán)境都更新到了WIN7+.NET framework4+VS2010上,在體驗(yàn)新技術(shù)和新環(huán)境帶給我們提高效率的方式方法的同時(shí)也帶來(lái)了一些兼容性的問(wèn)題;這幾天項(xiàng)目閑暇時(shí)在研究SQLite,在做實(shí)驗(yàn)的時(shí)候碰到個(gè)問(wèn)題,代碼編譯通過(guò)執(zhí)行時(shí)反復(fù)異常中斷,查到后面原來(lái)是SQLite.dll是在framework2.0環(huán)境下編譯的而現(xiàn)在的運(yùn)行環(huán)境是framework4.0,所以就出現(xiàn)了運(yùn)行異常,如圖:
由于以后的開(kāi)發(fā)過(guò)程中,可能會(huì)引用一些第三方的組件,有可能是老的framework版本下編譯的,同樣會(huì)出現(xiàn)此類(lèi)的問(wèn)題,所以在本文中提供一個(gè)解決辦法和說(shuō)明造成此問(wèn)題的原因。
查閱了相關(guān)資料,stackoverflow.com上建議在config文件中增加配置:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
MSDN上也對(duì)此方法進(jìn)行了闡述,參見(jiàn)http://msdn.microsoft.com/en-us/library/bbx34a2h(VS.100).aspx
但是使用此方法編譯后問(wèn)題仍然沒(méi)有解決,但是問(wèn)題可以明確鎖定為.net runtime環(huán)境的問(wèn)題了。
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
<requiredRuntime version="v4.0.30319" />
</startup>
再次運(yùn)行,問(wèn)題解決。這下需要了解是什么原因造成的?
supportedRuntime標(biāo)簽用來(lái) 具體說(shuō)明應(yīng)用程序支持的是哪個(gè).framework運(yùn)行時(shí)的版本;
requiredRuntime標(biāo)簽用來(lái) 具體說(shuō)明應(yīng)用程序只支持1.0版本的公用語(yǔ)言運(yùn)行時(shí)間。如果使用1.1版本或者后面的版本來(lái)編譯,應(yīng)用程序必須使用<supportedRuntime>元素;
注意:
<supportedRuntime>必須通過(guò)1.1版本或后面的版本而編譯的應(yīng)用程序來(lái)使用。只支持1.0版本的運(yùn)行時(shí)間的應(yīng)用程序必須使用<requiredRuntime>。
再次查閱CLR Runtime版本的相關(guān)資料,引用以下CLR運(yùn)行規(guī)則和各版本間關(guān)系匯總表格,如下:
規(guī)則:
1. CLR4.0及以上版本編譯的應(yīng)用程序總是運(yùn)行在應(yīng)用程序所被編譯的CLR版本上;
2. CLR4.0以下版本編譯的應(yīng)用程序優(yōu)先運(yùn)行在被編譯的CLR版本上,如果此版本不存在,則運(yùn)行最新的小于CLR4.0的版本;
匯總?cè)缦拢?/FONT>
EXE被編譯的CLR版本號(hào) |
機(jī)器上安裝有CLR 1.1? |
機(jī)器上安裝有CLR 2.0? |
機(jī)器上安裝有CLR 4.0? |
結(jié)果 |
1.1 |
是 |
無(wú)所謂 |
無(wú)所謂 |
加載CLR 1.1 |
2.0 |
無(wú)所謂 |
是 |
無(wú)所謂 |
加載CLR 2.0 |
1.1 |
否 |
是 |
無(wú)所謂 |
加載CLR 2.0 |
1.1 |
否 |
否 |
是 |
失敗 |
2.0 |
無(wú)所謂 |
否 |
是 |
失敗 |
至此我們就能很清楚的搞清各個(gè)CLR版本之間的聯(lián)系了。
總結(jié):微軟每次版本升級(jí)都會(huì)造成一些新的問(wèn)題的出現(xiàn),早年從CLRv1.0到CLRv2.0曾經(jīng)也造成很多的困惑,可能也是由于過(guò)大的組織造成不能面面俱到吧,希望在今后的版本升級(jí)中能真正做到無(wú)縫的版本聯(lián)接。
- win7和win2008 r2下配置IIS7(ASP.net運(yùn)行環(huán)境)
- Win7旗艦版中的IIS配置asp.net的運(yùn)行環(huán)境配置教程(圖文教程+視頻)
- Win7中IIS的ASP.NET環(huán)境配置簡(jiǎn)潔版
- win10下ASP.NET Core部署環(huán)境搭建步驟
- win2008 r2 服務(wù)器環(huán)境配置(FTP/ASP/ASP.Net/PHP)
- Win 2003中配置ASP.net環(huán)境
- .NET Core Windows環(huán)境安裝配置教程
- ASP.NET Core環(huán)境設(shè)置教程(2)
- Linux下部署.net core環(huán)境的步驟詳解
- ASP.NET Core環(huán)境變量和啟動(dòng)設(shè)置的配置教程
相關(guān)文章
[Asp.Net MVC4]驗(yàn)證用戶(hù)登錄實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了[Asp.Net MVC4]驗(yàn)證用戶(hù)登錄實(shí)現(xiàn)實(shí)例,這里整理了詳細(xì)的代碼,具有一定的參考價(jià)值,有需要的小伙伴可以參考下。2016-12-12使用 Salt + Hash 將密碼加密后再存儲(chǔ)進(jìn)數(shù)據(jù)庫(kù)
如果你需要保存密碼(比如網(wǎng)站用戶(hù)的密碼),你要考慮如何保護(hù)這些密碼數(shù)據(jù),象下面那樣直接將密碼寫(xiě)入數(shù)據(jù)庫(kù)中是極不安全的,因?yàn)槿魏慰梢源蜷_(kāi)數(shù)據(jù)庫(kù)的人,都將可以直接看到這些密碼2012-12-12在ASP.NET中實(shí)現(xiàn)多文件上傳的方法
在ASP.NET中實(shí)現(xiàn)多文件上傳的方法...2007-03-03.NET微信開(kāi)發(fā)之PC 端微信掃碼注冊(cè)和登錄功能實(shí)現(xiàn)
這篇文章主要介紹了.NET微信開(kāi)發(fā)之PC 端微信掃碼注冊(cè)和登錄功能實(shí)現(xiàn)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09VS2012下QT creator登錄對(duì)話框設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了VS2012下QT creator登錄對(duì)話框的設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06Asp.net core利用dynamic簡(jiǎn)化數(shù)據(jù)庫(kù)訪問(wèn)
這篇文章介紹了Asp.net core利用dynamic簡(jiǎn)化數(shù)據(jù)庫(kù)訪問(wèn)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07swagger上傳文件并支持jwt認(rèn)證的實(shí)現(xiàn)方法
今天通過(guò)本文給大家分享swagger上傳文件并支持jwt認(rèn)證的實(shí)現(xiàn)方法,文中提到了安裝方法及實(shí)現(xiàn)代碼,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-05-05ASP.NET 緩存分析和實(shí)踐淺析提高運(yùn)行效率
說(shuō)到ASP.NET緩存,那就是:盡早緩存;經(jīng)常緩存您應(yīng)該在應(yīng)用程序的每一層都實(shí)現(xiàn)緩存。2010-02-02asp.net 實(shí)現(xiàn)防迅雷等下載工具盜鏈
利用IHttpHandler接口來(lái)監(jiān)聽(tīng)對(duì)本網(wǎng)站的資源請(qǐng)求后綴名是否是我們要阻止的文件,如果是再判斷是否有下載權(quán)限。沒(méi)有就給它返回一個(gè)默認(rèn)的無(wú)用的文件。2009-02-02