如何知道我是否 运行 在 .NET Framework 或 .NET Core 下

How to know if I running under .NET Framework or .NET Core

假设我在 Nuget 中有一个库,编译为 netstandard2.0 以支持 netcoreapp2.1net471

现在,在编译时,我不知道我是否 运行ning 在 net471netcoreapp2.1netstandard2.0(我强调这一点是因为我不能只将我的 dll 编译为 netstandardnet471,因为如果 调用程序集 netstandard2.0,我还是不知道入口程序集)。

我怎么知道在运行时间我运行宁哪个TargetFramwork?


我知道有这样的解决方案:

Assembly.GetEntryAssembly()?
    .GetCustomAttribute<TargetFrameworkAttribute>()?
    .FrameworkName

但是如果你 运行 在 MSTest 和 net471Assembly.GetEntryAssembly() == null,那么我不想在使用我的 Nuget 的项目中中断测试。

回答标题中的问题:

调用 System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription 给你一个字符串:

字符串开头:

".NET" (for .NET 5 and later versions)
".NET Core" (for .NET Core 1.0 - 3.1)
".NET Framework"
".NET Native"`

https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.runtimeinformation.frameworkdescription?view=net-6.0