【问题标题】:How can I identify the calling platform from a .NET Standard library at runtime?如何在运行时从 .NET Standard 库中识别调用平台?
【发布时间】:2017-10-12 21:18:24
【问题描述】:

具体来说,我需要识别的是调用开发平台(即.NET Core vs. .NET Framework vs. Other)而不是我可以通过System获得的操作系统信息.Environment.OperatingSystem.Platform。有没有办法做到这一点?

(为了更详细地了解我的具体用例,我引用了一个库 - log4net - 通过向其传递 XML 资源来配置它。.NET Framework 支持我想要使用的一些可配置功能(如果可用)但不在 .NET Core 下,因此我希望能够根据我正在使用的资源向它传递不同版本的资源。)

【问题讨论】:

  • .NETStandard 的重点当然是永远不要这样做。因为这可能会使库 not 成为标准。如果必须,请考虑让主应用告诉您这一点,它知道。

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


【解决方案1】:

随着运行时的变化,从运行时环境中求解可能会被证明是不确定的。我会在应用程序运行之前强制解决这个问题。如前所述,您可以传入运行时或对其进行配置。

另一个选项类似于SL4J 提供的内容。运行时确定取决于您如何部署应用程序。

您可以创建自己的界面来公开平台信息。然后,在部署时,只需将适当的程序集添加到安装中。加载程序集并调用您需要的方法。

您也可以在此处了解 Microsoft 如何处理类似情况:https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/

【讨论】:

    【解决方案2】:

    我必须这样做一次。我需要调用一种方法,该方法因实现而异。我只是用反射来尝试一个又一个名字。

    试图检测运行时库是愚蠢的。直接检测差异。它不太可能破裂。

    【讨论】:

      猜你喜欢
      • 2018-06-23
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多