2014-04-03 65 views
3

我正在嘗試使用microsoft reference source,但遇到問題。 根據他們對troubleshooting的建議,我嘗試驗證我使用的是正確的.NET框架版本。然而 反彙編表明這一點:如何更改項目上的.NET框架版本?

enter image description here

,但我卻改變項目,你可以在這裏看到的目標框架:

enter image description here

我是否需要更改版本別的地方?

+0

您是否嘗試重建項目? –

+0

@LRNAB是的,好幾次,我也關閉並重新打開了Visual Studio。 – Sarien

+0

您是否認爲.Net Framework 4.0和4.5的「元數據版本」應該不同? – Habib

回答

6

你得到的是準確的。一個面向.NET 4.5或4.5.1的項目仍然使用CLR 4.0.30319版本和核心框架程序集,如mscorlib v4.0.0.0

這在很大程度上是對.NET版本3.0,3.5和3.5發生的事情的重複SP1,它們的目標是CLR 2.0.50727和核心框架程序集v2.0.0.0。就像4.5和4.5.1一樣,它們並不是新的並行版本。他們只是將新組件添加到現有組。

您仍然可以通過ildasm.exe知道您選擇了哪個目標,查看您在元數據中看到的System.Runtime.Versioning.TargetFrameworkAttribute屬性。 CLR檢查這個以確保你不想在.NET 4.0或4.5安裝上運行4.5.1。提供下載你需要的版本。它看起來像這樣(爲了便於閱讀而編輯):

.custom instance void [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::.ctor(string) = 
(01 00 1C 2E 4E 45 54 46 72 61 6D 65 77 6F 72 6B // ....NETFramework 
    2C 56 65 72 73 69 6F 6E 3D 76 34 2E 35 2E 31 01 // ,Version=v4.5.1. 
    00 54 0E 14 46 72 61 6D 65 77 6F 72 6B 44 69 73 // .T..FrameworkDis 
    70 6C 61 79 4E 61 6D 65 14 2E 4E 45 54 20 46 72 // playName..NET Fr 
    61 6D 65 77 6F 72 6B 20 34 2E 35 2E 31)   // amework 4.5.1 
+1

+1,這是一個很好的答案,所以SO真的很幸運有一個像你這樣的貢獻者 – Habib

0

如果您試圖從元數據版本中確定.Net框架版本,那麼這是不正確的。

元數據版本顯示運行時版本或CLR版本。

.NET Framework 4,4.5和4.5.1包括CLR 4,但Framework 2.0,3.0和3.5的.NET 包括CLR 2.0。 (有沒有的CLR版本3 。)

所以對於.NET Framework 4中,4.5和4.5.1,你會看到相同的CLR版本即V4.0.30319。您可能會看到this answer以識別.Net框架版本。

+0

這是一個非常好的答案,除了「它可以安全地假設」。它應該被驗證。你是正確的,在問題中概述的方法沒有這樣做。 –

+0

@BenVoigt,其實我試圖找到資源/參考來識別.Net框架版本的應用程序。但是你是對的,我應該修改這句話 – Habib