我正在寻找一些API,注册表设置,xml / json文件,它会告诉我,在运行时,当前框架实现了哪个级别的.NET Standard。
例如,这个API会在几年内告诉我:当前运行时支持.NET Standard 2.2,因为您正在运行.NET Framework 4.8.5。
更新:该过程需要在安装了SDK的开发人员计算机上运行。
答案 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 中可用。