.NET Standard Library — One library to rule them all.
.NET标准库功能可能因运行它的.NET平台而异:
如何检查当前运行.NET标准库的.NET平台?
例如:
// System.AppContext.TargetFrameworkName
// returns ".NETFramework,Version=v4.6.1" for .NET Framework
// and
// returns null for .NET Core.
if (IsNullOrWhiteSpace(System.AppContext.TargetFrameworkName))
// the platform is .NET Core or at least not .NET Framework
else
// the platform is .NET Framework
回答问题是否可靠(至少对于.NET Framework和.NET Core)?
答案 0 :(得分:2)
嗯......其中一个main ideas behind .NET Standard是除非你正在开发一个非常特定的跨平台库,否则一般来说你不应该关心底层运行时实现是什么。
但如果你真的必须采用一种推翻这一原则的方法:
public enum Implementation { Classic, Core, Native, Xamarin }
public Implementation GetImplementation()
{
if (Type.GetType("Xamarin.Forms.Device") != null)
{
return Implementation.Xamarin;
}
else
{
var descr = RuntimeInformation.FrameworkDescription;
var platf = descr.Substring(0, descr.LastIndexOf(' '));
switch (platf)
{
case ".NET Framework":
return Implementation.Classic;
case ".NET Core":
return Implementation.Core;
case ".NET Native":
return Implementation.Native;
default:
throw new ArgumentException();
}
}
}
如果你想变得更加恶劣,那么你也可以为Xamarin.Forms.Device.RuntimePlatform引入不同的值(更多细节here)。
答案 1 :(得分:2)
使用System.Runtime.InteropServices
命名空间中的RuntimeInformation.FrameworkDescription
属性。
返回一个字符串,指示正在运行应用程序的.NET安装的名称。
该属性返回以下字符串之一:
“。NET Core”。
“。NET Framework”。
“。NET Native”。