You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:09:59