Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check the OS version at runtime, e.g. on Windows or Linux, without using a conditional compilation statement

How do I determine what platform my C# code is running on? for example whether it is running on Linux or windows so that I can execute different code at runtime.

I have a C# Windows application that I want to build to target Windows and Linux platforms.

So far I have created two project files pointing to the same set of source code files. I then use a conditional compilation statement one of the projects called LINUX.

Where there are difference in the actual code I use conditional statements using the conditional compilation statement, for example,

#if (LINUX)     ' Do something #endif 

Is there a better way of doing this? I don't really want to have two project files.

like image 200
Bobbo Avatar asked Feb 25 '11 12:02

Bobbo


1 Answers

I found this recommendation on one of Microsoft's blogs:

We recommend you to use RuntimeInformation.IsOSPlatform() for platform checks.

Reference: Announcing the Windows Compatibility Pack for .NET Core

IsOSPlatform() takes an argument of types OSPlatform which has three values by default: Windows, Linux and OSX. It can be used as follow:

if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) {   // Do something } 

The API is part of .NET Standard 2.0, and therefore available in .NET Core 2.0 and .NET Framework 4.7.1.

like image 92
Alex Sanséau Avatar answered Sep 28 '22 13:09

Alex Sanséau