我正在尝试根据编译时环境使一些F#代码有条件,并且找不到F#编译器可识别的任何特定于操作系统的定义。 #if MONO不起作用。有没有办法在F#的编译时检测操作系统?
答案 0 :(得分:5)
我认为没有任何开箱即用的方法可以做到这一点。您需要定义自己的符号,例如MONO
,并在构建Mono版本时使用--define:MONO
调用编译器。
那就是说,我会对此有点小心 - 没有明确的概念"编译为Mono"在F#和.NET中。编译F#代码时,总是会得到一个可以在任何地方运行的dll
或exe
,并且没有什么可以阻止您复制一个构建输出并在另一个环境中运行它。
有一种标准方法可以使用以下方法检测程序在运行时运行的位置:
Type.GetType("Mono.Runtime") != null
您可能有充分的理由想要两个单独的构建,但是可能值得考虑是否可以在运行时做出适当的选择(如果您依赖某些特定于Windows的库(如WinForms图表),这可能不起作用)