Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Detecting OS/Target when building .Net Core project (Useful when you need to DllImport different lib name by OS).

Notifications You must be signed in to change notification settings

Balnian/TestOSDetectCore2.0

Repository files navigation

TestOSDetectCore2.0

Detecting OS/Target when building .Net Core project (Useful when you need to DllImport different lib name by OS). Only add the following to your .csproj

<!-- OS Detection default Value -->
 <PropertyGroup>
 <IsWindows>False</IsWindows>
 <IsOSX>False</IsOSX>
 <IsAndroid>False</IsAndroid>
 <IsLinux>False</IsLinux>
 </PropertyGroup>
 <!-- Check if we target Windows -->
 <PropertyGroup Condition="($(RuntimeIdentifier.StartsWith('win')) And !$(RuntimeIdentifier.Equals('')) ) Or ( $(OS.Equals('Windows_NT')) And $(RuntimeIdentifier.Equals('')) ) ">
 <!--Replacing '-' and '.' by '_' in Constants because we cannot use those characters in the source files -->
 <DefineConstants>_WINDOWS_, $(RuntimeIdentifier.Replace("-","_").Replace(".","_"))</DefineConstants>
 <IsWindows>True</IsWindows>
 </PropertyGroup>
 <!-- Check if we target OSX -->
 <PropertyGroup Condition="($(RuntimeIdentifier.StartsWith('osx')) And !$(RuntimeIdentifier.Equals('')) ) Or ( $([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX))) And $(RuntimeIdentifier.Equals('')) ) ">
 <!--Replacing '-' and '.' by '_' in Constants because we cannot use those characters in the source files -->
 <DefineConstants>_OSX_, $(RuntimeIdentifier.Replace("-","_").Replace(".","_"))</DefineConstants>
 <IsOSX>True</IsOSX>
 </PropertyGroup>
 <!-- Check if we target Android (Doesn't Detect properly for now but is Official: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog) -->
 <!-- (Less check to do because we consider we cannot Dev on Android and anyway there's no way to detect an Android Platform other then the RID) -->
 <PropertyGroup Condition="$(RuntimeIdentifier.StartsWith('android')) ">
 <!--Replacing '-' and '.' by '_' in Constants because we cannot use those characters in the source files -->
 <DefineConstants>_ANDROID_, $(RuntimeIdentifier.Replace("-","_").Replace(".","_"))</DefineConstants>
 <IsAndroid>True</IsAndroid>
 </PropertyGroup>
 <!-- Check if we target Linux (To many name to check, instead we check if not one of the other OS) -->
 <PropertyGroup Condition=" !$(IsWindows) And !$(IsOSX) And !$(IsAndroid)">
 <!--Replacing '-' and '.' by '_' in Constants because we cannot use those characters in the source files -->
 <DefineConstants>_LINUX_, $(RuntimeIdentifier.Replace("-","_").Replace(".","_"))</DefineConstants>
 <IsLinux>True</IsLinux>
 </PropertyGroup>

And then you can detect the OS you are running on with C# preprocessor directives

static void Main(string[] args)
 {
#if _WINDOWS_
 Console.WriteLine("_WINDOWS_");
#if (_WINDOWS_ == win10_x64)
 Console.WriteLine("win10_x64");
#endif
#elif _OSX_
 Console.WriteLine("_OSX_");
#elif _LINUX_
 Console.WriteLine("_LINUX_");
#if _LINUX_ == ubuntu_14_04_x64
 Console.WriteLine("ubuntu_14_04_x64");
#elif _LINUX_ == ubuntu_16_04_x64
 Console.WriteLine("ubuntu_16_04_x64");
#endif
#elif _ANDROID_ 
 /* Doesn't Detect properly for now but is Official: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog */
 Console.WriteLine("_ANDROID_");
#endif
 }

About

Detecting OS/Target when building .Net Core project (Useful when you need to DllImport different lib name by OS).

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /