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

时间:2017-10-12 12:35:32

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

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

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

2 个答案:

答案 0 :(得分:0)

从运行时环境中解决可能会因运行时更改而变得不确定。我会在应用程序运行之前预先强制解决问题。如前所述,您可以传入运行时或配置它。

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

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

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

答案 1 :(得分:0)

我必须这样做一次。有一种方法我需要调用不同的实现方式。我只是用反射来尝试一个接一个的名字。

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