如何以编程方式确定当前版本的.NET Framework支持哪个版本的.NET Standard?

时间:2017-09-04 14:24:28

标签: .net .net-core

我正在寻找一些API,注册表设置,xml / json文件,它会告诉我,在运行时,当前框架实现了哪个级别的.NET Standard。

例如,这个API会在几年内告诉我:当前运行时支持.NET Standard 2.2,因为您正在运行.NET Framework 4.8.5。

更新:该过程需要在安装了SDK的开发人员计算机上运行。

2 个答案:

答案 0 :(得分:0)

似乎有一个用于获取与.NET运行时相关的信息的类。具体来说,假设FrameworkDescription属性返回一个字符串,该字符串指示当前的“正在运行该应用程序的.NET安装”。但是,如果您使用的是.NET Core 3.0 RC1之前的版本,则最终可能会得到不正确的版本号。最新的RC1版本指出此问题已解决。

要获取框架版本字符串:

using System;
using System.Runtime.InteropServices;

Console.WriteLine($"RuntimeInformation.FrameworkDescription: {RuntimeInformation.FrameworkDescription}");

这将打印一个字符串,该字符串与程序集正在其上运行的当前.NET Framework版本相对应。 ".NET Core"".NET Native"".NET Framework"之一,后跟当前版本字符串。

答案 1 :(得分:0)

您在评论中提到您正在寻找一种以编程方式确定要安装哪个 Nuget lib 目录的方法。您可以使用 Microsoft 的 Nuget.Framework 包,它提供了一个 DefaultCompatibilityProvider.IsCompatible 函数。

使用它看起来像这样:

var currentVersion = GetCurrentFramework();
var selectedPackage = Directory
    .GetDirectories(Path.Combine("path/to/nuget/package/", "lib"))
    .Last(lib => DefaultCompatibilityProvider.Instance.IsCompatible(
        currentVersion,
        NuGetFramework.Parse(Path.GetFileName(lib))
    ));

// helper method for getting the currently running framework
private NuGetFramework GetCurrentFramework() => 
    NuGetFramework.Parse(
        Assembly
            .GetEntryAssembly()?
            .GetCustomAttribute<TargetFrameworkAttribute>()?
            .FrameworkName
    );

此包和 DefaultCompatibilityProvider 类的源代码在 on GitHub 中可用。