2014-04-03 61 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