如何在运行时从 .NET Standard 库中识别调用平台?

How can I identify the calling platform from a .NET Standard library at runtime?

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

(为了提供有关我的特定用例的更多详细信息,我引用了一个库 - log4net - 通过向其传递 XML 资源对其进行配置。如果可用,我想使用它的一些可配置功能在 .NET Framework 下受支持,但在 .NET Core 下不受支持,因此我希望能够根据我正在使用的资源向它传递不同版本的资源。)

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

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

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

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

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

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