2012-05-15 45 views
2

在我的電腦上,我安裝了.NET Framework 2.0,然後安裝了.NET Fratmeworkt 3.0。然而,最近我從一個程序中看到「事件1000,.NET運行時2.0錯誤報告」的異常。我想知道,爲什麼這個程序仍然使用.NET運行時2.0而不是新版本。我如何檢查特定程序使用的.NET Runtime版本?有可能改變它嗎?.net運行時間2.0而不是最新版本?

回答

2

這一切都取決於所針對的應用程序編譯的.NET版本。開發人員選擇目標框架。據我所知,最終用戶不能在部署後更改使用哪個版本的庫。如果應用程序的目標是2.0,即使安裝了4.0,它也將始終運行在2.0版本的庫上。

3

「.NET運行時」實際上意味着「公共語言運行時」(CLR),它已經是.NET 2.0,3.0和3.5的版本2.0。只有使用.NET 4.0,CLR版本也增加到4.0(有很多問題令人困惑,關於這個SO的雙重版本,好的概述見answer)。所以你看到的信息可能會令人困惑,但仍然是正確的。

如果您尚未安裝.NET 4.0,則.NET運行時2.0是您計算機上的唯一版本。

您可能想知道應用程序是否實際上是針對.NET Framework 3.0(3.5)而不是.NET Framework 2.0編譯/構建的。

爲了獲取這些信息,您需要查看應用程序集的元數據,即其他程序集的引用(包括.NET框架的引用)的存儲位置,以及這些其他程序集的版本。

要查看此信息,您可以使用.NET Framework SDK(或Visual Studio)附帶的Reflector或ILDASM.EXE

例如,在您選擇的二進制(可執行文件或DLL)上使用ILDASM.EXE,然後打開「MANIFEST」節點。你會看到條目是這樣的:

.assembly extern System.Windows.Forms 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 4:0:0:0 
} 

,在此就從.NET 4.0的應用程序,並採取只指System.Windows.Forms.dll thise情況下,但我覺得你得到的圖片。

通過在應用程序的配置文件中指定<supportedRuntime>元素,您可以(部分)影響應用程序使用哪個版本的運行時。有關此更多的討論,請參閱this Stack Overflow question,其中others

1

運行時間是關鍵字。運行時只有4種不同的版本:1.0,1.1,2.0和4.0。您仍在使用CLR的版本2.0.50727和抖動。並且mscorlib.dll和其他核心.NET框架程序集仍然是2.0.0.0

當您安裝.NET 3.0,一些支持WCF,WPF和Linq之類的新程序集時,您肯定會獲得更多的好東西,以及一個新版本的C#編譯器。即使它們不需要新版本的運行時,也足以保證版本號增加。

.NET的下一個版本4.5也會發生同樣的情況。運行版本保持不變,4.0.30319

相關問題