Как проверить ОС в препроцессоре F #? - PullRequest
1 голос
/ 09 января 2020

Мы работаем над одним и тем же F # проектом. Некоторые используют MacOS и Visual Studio Code вместе с Ionide , в то время как другие используют Windows с Visual Studio. В F # -коде нам нужно получить доступ к некоторым файлам, но MacOS использует / для указания путей, а Windows использует \. В F #, как мы можем сделать что-то вроде:

#if OS_WINDOWS
    let path = "path\to\file.txt"
#elif OS_MAC
    let path = "path/to/file.txt"
#endif

1 Ответ

3 голосов
/ 09 января 2020

Нет встроенного предопределенного символа, указывающего, для какой операционной системы вы компилируете. Когда вы используете. NET, вы обычно используете одну и ту же скомпилированную сборку во всех операционных системах, так что в любом случае это не то, что вы разумно можете сделать в препроцессоре.

Вы можете проверить, какая у вас ОС работает во время выполнения, используя System.Environment:

open System

let path = 
  if Environment.OSVersion.Platform = PlatformID.Win32NT then @"path\to\file.txt"
  else @"path/to/file.txt"

Тем не менее, если вас беспокоит только косая черта и обратная косая черта в пути, вы можете просто использовать:

let path = System.IO.Path.Combine("path", "to", "file.txt")
...