如何确定VB.NET应用程序当前运行的.NET Framework具体版本
确定VB.NET应用运行的具体.NET Framework 4.x版本(全版本兼容方案)
针对你的场景——应用配置了<supportedRuntime version="v4.0"/>,需要在所有.NET Framework 4.x版本环境下获取实际运行的框架版本,以下是两种不受版本限制的可靠方案:
方案1:读取注册表(官方推荐)
.NET Framework 4.x的版本信息通过注册表中的Release值标识,该值与框架版本的映射关系是官方定义的。由于你的应用会自动使用系统中安装的最高兼容4.x版本,读取对应注册表项即可得到运行时版本。需要区分32位/64位进程:
VB.NET代码实现
Imports Microsoft.Win32 Public Function GetRunningNetFrameworkVersion() As String Dim registryPath As String = If(Environment.Is64BitProcess, "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full", "SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full") Using key As RegistryKey = Registry.LocalMachine.OpenSubKey(registryPath) If key Is Nothing Then Return "Unknown .NET Framework 4.x version" Dim releaseValue As Integer = CInt(key.GetValue("Release")) Return MapReleaseToFrameworkVersion(releaseValue) End Using End Function Private Function MapReleaseToFrameworkVersion(release As Integer) As String Select Case release Case >= 533320 : Return ".NET Framework 4.8.1" Case >= 528040 : Return ".NET Framework 4.8" Case >= 461808 : Return ".NET Framework 4.7.2" Case >= 461308 : Return ".NET Framework 4.7.1" Case >= 460798 : Return ".NET Framework 4.7" Case >= 394802 : Return ".NET Framework 4.6.2" Case >= 394254 : Return ".NET Framework 4.6.1" Case >= 393295 : Return ".NET Framework 4.6" Case >= 379893 : Return ".NET Framework 4.5.2" Case >= 378675 : Return ".NET Framework 4.5.1" Case >= 378389 : Return ".NET Framework 4.5" Case Else : Return ".NET Framework 4.0" End Select End Function
方案2:读取核心程序集文件版本
每个.NET Framework 4.x版本对应的mscorlib.dll(核心运行时程序集)有唯一的文件版本,通过读取当前进程加载的该程序集版本,可以直接判断运行时框架版本:
VB.NET代码实现
Imports System.Reflection Imports System.Diagnostics Public Function GetRunningNetFrameworkVersionByAssembly() As String ' 加载mscorlib核心程序集 Dim mscorlibAssembly As Assembly = Assembly.Load( "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") Dim fileVersionInfo As FileVersionInfo = FileVersionInfo.GetVersionInfo(mscorlibAssembly.Location) Dim fileVersion As String = fileVersionInfo.FileVersion Select Case fileVersion Case "4.8.9181.0" : Return ".NET Framework 4.8.1" Case "4.8.4084.0" : Return ".NET Framework 4.8" Case "4.7.3190.0" : Return ".NET Framework 4.7.2" Case "4.7.2556.0" : Return ".NET Framework 4.7.1" Case "4.7.2053.0" : Return ".NET Framework 4.7" Case "4.6.1586.0" : Return ".NET Framework 4.6.2" Case "4.6.1055.0" : Return ".NET Framework 4.6.1" Case "4.6.81.0" : Return ".NET Framework 4.6" Case "4.5.51641.0" : Return ".NET Framework 4.5.2" Case "4.5.30501.0" : Return ".NET Framework 4.5.1" Case "4.5.21022.0" : Return ".NET Framework 4.5" Case "4.0.30319.1" : Return ".NET Framework 4.0" Case Else : Return $"Unknown version (file version: {fileVersion})" End Select End Function
关键说明
- 避免使用
Environment.Version:从.NET Framework 4.6开始,该属性返回的CLR版本固定为4.0.30319.42000,无法区分具体框架版本。 RuntimeInformation.FrameworkDescription仅支持.NET Framework 4.7.1及以上,不满足全版本兼容需求。- 你的应用配置了
<supportedRuntime version="v4.0"/>,会自动绑定系统中安装的最高兼容4.x版本,因此上述方案获取的就是程序实际运行的版本。
内容的提问来源于stack exchange,提问作者IT Researcher143
相关产品推荐
相关产品推荐

