如何确定运行.NET Standard类库的.NET平台?

时间:2018-01-15 08:34:32

标签: c# .net-core .net-standard .net-standard-2.0

.NET Standard Library — One library to rule them all.

.NET标准库功能可能因运行它的.NET平台而异:

  • .NET Framework
  • .NET Core
  • Xamarin

如何检查当前运行.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)?

2 个答案:

答案 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”。

  •