条件付きコンパイル文を使用せずに、Windows や Linux などの実行時に OS バージョンを確認する方法 質問する

条件付きコンパイル文を使用せずに、Windows や Linux などの実行時に OS バージョンを確認する方法 質問する

C# コードがどのプラットフォームで実行されているかを判断するにはどうすればよいでしょうか。たとえば、実行時に異なるコードを実行できるように、Linux で実行されているか、Windows で実行されているかなどです。

Windows および Linux プラットフォームをターゲットとする C# Windows アプリケーションを構築したいと考えています。

これまで、同じソースコードファイルセットを指す2つのプロジェクトファイルを作成しました。次に、条件付きコンパイルステートメントを使用して、プロジェクトの1つにリナックス

実際のコードに違いがある場合は、条件付きコンパイルステートメントを使用して条件文を使用します。たとえば、

#if (LINUX)
    ' Do something
#endif

これを行うより良い方法はありますか? 実際には 2 つのプロジェクト ファイルを持ちたくありません。

ベストアンサー1

Microsoft のブログの 1 つで、次のような推奨事項を見つけました。

プラットフォームのチェックには、RuntimeInformation.IsOSPlatform() を使用することをお勧めします。

参照:.NET Core 向け Windows 互換機能パックの発表

IsOSPlatform()型の引数を取るOSPlatformデフォルトでは次の 3 つの値があります。WindowsLinuxそしてOSX以下のように使用できます。

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

API は .NET Standard 2.0 の一部であるため、.NET Core 2.0 および .NET Framework 4.7.1 で利用できます。

おすすめ記事