如何可靠地检测安装的实际.NET 4.5版本?

ale*_*rul 50 .net .net-4.5

我的实际问题是我遇到了两个版本的.NET 4.5完整设置:

  • 一个(可能)较旧的,在下载SQL Server数据工具时也可用
    • 尺寸: 50,349,920
    • MD5: a5e81d1b3905ada0a6e35fd6c6a2e1f4
  • 今天早上从这里下载的一个(可能的)新版本:http://www.microsoft.com/visualstudio/eng/downloads
    • 尺寸: 50,352,408
    • MD5: d02dc8b69a702a47c083278938c4d2f1

这两个设置的版本是4.5.50709.17929.在内部,主要的区别是netfx_Full.mzz文件,但在使用7-zip解压缩内容后,我最终得到了大量具有相同版本的文件,即使文件内容不同(我已经检查了大约42个的大约20个随机文件)所以我无法确定哪一个更新.

有没有办法可靠地检测已安装的.NET 4.5运行时的实际版本,所以我只能在真正需要时运行安装程序?

更新

我检查了所有具有不同内容的426个文件,并且它们在两个设置中都具有相同的ProductVersion和FileVersion.因此,注册表或文件校验和是下一步.

更新2

注册表中列出的版本对于两个设置都是相同的: 4.5.50709

更新3

.NET 4.5.2现已推出:

此版本的.NET Framework与.NET Framework 3.5 SP1和早期版本并行运行,但对.NET Framework 4,.NET Framework 4.5和.NET Framework 4.5.1执行就地更新.

Dan*_*iel 105

MS最近修补了.NET 4.5以在某些情况下恢复与.NET 4.0的向后兼容性(请参阅http://blogs.msdn.com/b/dotnet/archive/2012/10/17/net-framework-4-5-off -to-a-great-start.aspx).

MS可能会使用这些更改更新设置(以便升级到.NET 4.5的用户不会遇到compat问题),但我不知道为什么他们不会更改设置上的版本号.

另请注意,.NET版本号与运行时版本号之间存在差异System.Environment.Version.后者仍然是4.0.30319.*对于.NET 4.5,只有版本号更改(使用.NET 4.5更新,以及每个安全更新).

以下是在野外观察到的运行时版本的一些示例:

基础4.0

  • 4.0.30319.1 = .NET 4.0 RTM
  • 4.0.30319.269 = Windows XP SP3,7,7 SP1上的.NET 4.0(带有MS12-035 GDR安全更新)
  • 4.0.30319.276 = Windows XP SP3上的.NET 4.0(4.0.3运行时更新)
  • 4.0.30319.296 = Windows XP SP3,7上的.NET 4.0(带有MS12-074 GDR安全更新)
  • 4.0.30319.544 = Windows XP SP3,7,7 SP1上的.NET 4.0(带有MS12-035 LDR安全更新)
  • 4.0.30319.1008 = Windows XP SP3,7,7 SP1上的.NET 4.0(带有MS13-052 GDR安全更新)
  • 4.0.30319.1022 = Windows XP SP3,7,7 SP1上的.NET 4.0(带有MS14-009 GDR安全更新)
  • 4.0.30319.1026 = Windows XP SP3,7,7 SP1上的.NET 4.0(带有MS14-057 GDR安全更新)
  • 4.0.30319.2034 = Windows XP SP3,7,7 SP1上的.NET 4.0(带有MS14-009 LDR安全更新)

4.5

  • 4.0.30319.17626 = .NET 4.5 RC
  • 4.0.30319.17929 = .NET 4.5 RTM
  • 4.0.30319.18010 = Windows 8上的.NET 4.5
  • 4.0.30319.18052 = Windows 7 SP1 64位上的.NET 4.5
  • 4.0.30319.18063 = 64位Windows 7 SP1上的.NET 4.5(带有MS14-009安全更新)

4.5.1

  • 4.0.30319.18408 = Windows 7 SP1 64位上的.NET 4.5.1
  • 4.0.30319.18444 = 64位Windows 7 SP1上的.NET 4.5.1(带有MS14-009安全更新)
  • 4.0.30319.34014 = Windows 4.5 64位上的.NET 4.5.1

4.5.2

  • 4.0.30319.34209 = Windows 7 SP1 64位上的.NET 4.5.2
  • 4.0.30319.34209 = Windows 8.1 64位上的.NET 4.5.2

4.6及以后

  • 4.0.30319.42000

我在Windows Update历史记录中没有看到任何.NET更新,因此我想v18010的更新已作为KB 2756872的一部分安装.

更新:显然,由于原始下载中的数字签名错误,Microsoft更新了.NET 4.5设置.KB 2770445.

  • 注意:.NET 4.6中的[`Environment.Version`](https://msdn.microsoft.com/en-us/library/system.environment.version.aspx)返回"4.0.30319.42000". (5认同)