获取当前.NET Framework版本的步骤

获取当前.NET Framework版本的步骤,.net,.net,我使用.NET3.5SP1平台构建我的C#项目。我的代码将被编译,并用于其他.NET平台版本(但更高版本)。我需要在代码中获取当前的.NET Framework版本。控制台输出(有关我从注册表获得的已安装版本的信息): 我知道.NET3.0和3.5是基于.NET2.0的,但我需要获得当前平台的确切版本,而不是基本平台版本 为什么我(通过环境.Version)得到2.0.50727.5477而不是3.5.30729.5420 为什么当前版本在版本字符串的最后一个数字中有.5477而不是.5420

我使用.NET3.5SP1平台构建我的C#项目。我的代码将被编译,并用于其他.NET平台版本(但更高版本)。我需要在代码中获取当前的.NET Framework版本。控制台输出(有关我从注册表获得的已安装版本的信息):

我知道.NET3.0和3.5是基于.NET2.0的,但我需要获得当前平台的确切版本,而不是基本平台版本

  • 为什么我(通过
    环境.Version
    )得到2.0.50727.5477而不是3.5.30729.5420
  • 为什么当前版本在版本字符串的最后一个数字中有.5477而不是.5420
  • 如何获得当前.NET Framework的确切版本
  • 我的代码基于:


    检查解决方案中的所有项目是否针对正确版本的.net framework

    这是您要查找的
    环境。版本
    属性:

    你的答案是:

    .NET Framework版本与CLR版本不同。CLR只是.NET Framework的一个组件。因此.NET Framwork版本3.0和3.5使用CLR版本2.0

    您的测试程序正在获取.NET Framework的确切版本。但它错误地将
    Environment.Version
    标记为“当前.NET Framework版本”,而实际上它是“当前CLR版本”。@Andrew提供的链接将该值声明为:

    获取描述主版本、次版本、生成版本和 公共语言运行库的修订号


    您阅读我的主题时不经意(我在最后一个输出字符串中使用它)。目前共有4个clr版本:
    1.0
    1.1
    2.0
    4
    。这就是让你困惑的原因。这是一种你永远不想解决的问题。特别是如果您现在枚举“4.5.1客户端”,则它不存在。只有major.minor.build编号是稳定的,当通过Windows Update交付更新和安全修补程序时,修订号可以任意更改。例如:AutoCAD 2009应用程序使用.Net 3.0,但如果同时安装了.Net 3.5,则可以使用.Net 3.5。我的一些插件是为.NET3.5SP1平台编译的。在AutoCAD中,我必须检查当前的.NET版本,如果是3.5 SP1,我可以下载其他插件。他们不会使用3.0。所以我需要得到当前.Net Framework的确切版本。所以只要查看注册表中是否有3.5版本,你根本不关心版本号。Alberto向您展示了如何做到这一点。我知道如何获得所有已安装的.Net Framework版本(这不是问题)。但是为什么
    Environment.Version
    返回无效(不是确切的)版本?它返回运行时版本。与.NET Framework版本无关,与CLR版本有关。对于2.0和3.5SP1之间的所有框架版本,都是v2.0.50727。对于所有更高版本,它都是v4.0.30319。请注意,您将在AutoCAD 2012中获得版本4,测试插件以查看它们是否仍在.NET 4上正确运行是必要的。“不确切”条款已经包含在我之前的评论中。
    Installed .NET Framework versions:
    v2.0.50727      2.0.50727.5420   SP2
    v3.0    3.0.30729.5420   SP2
    v3.5    3.5.30729.5420   SP1
    v4.5.1 Client   4.5.50938
    v4.5.1 Full     4.5.50938
    v4.0 Client     4.0.0.0
    ***
    Current .NET Framework version: 2.0.50727.5477
    Press any key for exit...
    
    static void Main(string[] args) {
      NetFrameworkInfo[] frameworks = 
        ExtendedEnvironment.GetInstalledNetFameworkVersions();
      Console.WriteLine("Installed .NET Framework versions:");
      foreach (NetFrameworkInfo item in frameworks) {
        Console.WriteLine(item);
      }
      Console.WriteLine("***");
      Version version = Environment.Version;
      Console.WriteLine("Current .NET Framework version: {0}", version);
      Console.WriteLine("Press any key for exit...");
      Console.ReadKey();
    }
    
    Version ver = Environment.Version;
    Console.WriteLine("CLR Version {0}", ver.ToString());