Как определить, является ли ОС 32- или 64-разрядной кросс-платформенной на .NET Standard 1.5?

Я все время искал решение этой проблемы, но, хотя вопрос был задан до того, как ответы больше не применимы к .NET Standard 1.5 и его кроссплатформенному образу мышления. Кроме того, этот вопрос касается архитектуры ОС, а не архитектуры платформы .NET.

Что я пробовал

Лучший ответ: Environment.Is64BitOperatingSystem - это API, который не реализован в .NET Standard 1.5.

Ответ

/// <summary>Is64s the bit operating system.</summary>
/// <returns></returns>
if (IntPtr.Size == 8)
    // 64Bit
else
    // 32bit

это не то, что мне нужно. Хотя это все еще возможно в .NET Standard, он определяет разрядность платформы .NET, а не базовой ОС.

Почти во всех других ответах используется [DllImport("kernel32.dll")], который, я почти уверен, не будет работать ни с чем, кроме Windows.

Вопрос

Итак, как мне определить разрядность базовой ОС для всех платформы, которые поддерживает .NET Standard 1.5 (Linux, iOS, Windows, Android и т. д.)?


person NightOwl888    schedule 10.08.2017    source источник
comment
до сих пор почти все реализации, которые я видел в Mono, использовали один и тот же трюк IntPtr.Size   -  person Timothy Groote    schedule 10.08.2017
comment
Возможный дубликат Как узнать, работает ли мое приложение как 32-разрядное или 64-разрядное?   -  person Owen Pauling    schedule 10.08.2017
comment
@OwenPauling нет, это не так. это конкретно о стандарте .NET, который не предлагает тех функций, которые используются в каждом ответе в этом потоке.   -  person Timothy Groote    schedule 10.08.2017
comment
Как насчет поиска источника для Environment.Is64BitOperatingSystem?   -  person DavidG    schedule 10.08.2017
comment
@DavidG, весь этот код использует код, специфичный для Windows   -  person Timothy Groote    schedule 10.08.2017
comment
@TimothyGroote Да, я знаю, поэтому я скорее прокомментировал, чем ответил. Это было просто предложение для отправной точки, иначе вопрос превратился бы в запрос библиотеки.   -  person DavidG    schedule 10.08.2017
comment
@TimothyGroote - как я уже упоминал, IntPtr.Size не сообщает разрядность базовой ОС.   -  person NightOwl888    schedule 10.08.2017
comment
Пожалуйста, снова откройте этот вопрос. Это не дубликат связанного вопроса (речь идет вовсе не о разрядности приложения, а о базовой ОС).   -  person NightOwl888    schedule 10.08.2017


Ответы (1)


Вы можете использовать System.Runtime.InteropServices.RuntimeInformation.OSArchitecture

person Knight King    schedule 10.08.2017
comment
Вы уверены? github.com/dotnet/standard/blob/master/ документы / версии / - person Knight King; 10.08.2017