ネコのために鐘は鳴る

寺院に住み着くパソコ〇好き

(C#) ランタイムが Blazor WebAssembly か否かを取得する

実行中のOS が何であるかを取得する時はSystem.Environment.OSVersion.Platformを使えそうかと思ってました。

using System;

// Windows 10 なら "Win32NT"
Console.WriteLine(Environment.OSVersion.Platform);

ところが、これを Mac .NET Core で取得すると"MacOSX"ではなく"Unix"と返ってきます。 それはともかく、MSDNを見ると何とも説明が古臭いです。SilverlightとかXboxとかはまだしも、"Win32S"っていつの時代だ……私生まれてない。(知らなくてググったら16bitのOSがうんぬんかんぬん)

deprecated が多すぎる。

時代は進んで Blazor なんていうものが出てきて、そもそもそんなものは想定されていない。Blazor WebAssembly (client-side のやつ) でこれを実行するとUnixと出てきます。自分のことを Unix だと思い込んでいる一般人かな。

 

代わりにSystem.Runtime.InteropServices.RuntimeInformation.OSDescriptionを使います。

using System.Runtime.InteropServices;

// Blazor WebAssembly で実行すると "web"
Console.WriteLine(RuntimeInformation.OSDescription);

ちゃんと"web"と出てきました。WebAssembly か否かが取得できました。