如何知道我是否 运行 在 .NET Framework 或 .NET Core 下
How to know if I running under .NET Framework or .NET Core
假设我在 Nuget 中有一个库,编译为 netstandard2.0
以支持 netcoreapp2.1
和 net471
。
现在,在编译时,我不知道我是否 运行ning 在 net471
、netcoreapp2.1
、 或 netstandard2.0
(我强调这一点是因为我不能只将我的 dll 编译为 netstandard
和 net471
,因为如果 调用程序集 是 netstandard2.0
,我还是不知道入口程序集)。
我怎么知道在运行时间我运行宁哪个TargetFramwork?
我知道有这样的解决方案:
Assembly.GetEntryAssembly()?
.GetCustomAttribute<TargetFrameworkAttribute>()?
.FrameworkName
但是如果你 运行 在 MSTest 和 net471
中 Assembly.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"`
假设我在 Nuget 中有一个库,编译为 netstandard2.0
以支持 netcoreapp2.1
和 net471
。
现在,在编译时,我不知道我是否 运行ning 在 net471
、netcoreapp2.1
、 或 netstandard2.0
(我强调这一点是因为我不能只将我的 dll 编译为 netstandard
和 net471
,因为如果 调用程序集 是 netstandard2.0
,我还是不知道入口程序集)。
我怎么知道在运行时间我运行宁哪个TargetFramwork?
我知道有这样的解决方案:
Assembly.GetEntryAssembly()?
.GetCustomAttribute<TargetFrameworkAttribute>()?
.FrameworkName
但是如果你 运行 在 MSTest 和 net471
中 Assembly.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"`