【发布时间】:2018-05-17 18:35:21
【问题描述】:
我正在尝试根据编译时环境使一些 F# 代码有条件,但找不到 F# 编译器可以识别的任何特定于操作系统的定义。 #如果单声道不起作用。有没有办法在 F# 的编译时检测操作系统?
【问题讨论】:
标签: compilation f# mono preprocessor
我正在尝试根据编译时环境使一些 F# 代码有条件,但找不到 F# 编译器可以识别的任何特定于操作系统的定义。 #如果单声道不起作用。有没有办法在 F# 的编译时检测操作系统?
【问题讨论】:
标签: compilation f# mono preprocessor
我认为没有任何开箱即用的方法可以做到这一点。在构建 Mono 版本时,您需要定义自己的符号,例如 MONO,并使用 --define:MONO 调用编译器。
也就是说,我会小心一点——在 F# 和 .NET 中没有明确的“为 Mono 编译”的概念。当你编译 F# 代码时,你总是会得到一个 dll 或 exe,你可以在任何地方运行,没有什么能阻止你复制一个构建输出并在另一个环境中运行它。
有一种标准的方法可以检测程序在运行时的运行位置:
Type.GetType("Mono.Runtime") != null
您可能有充分的理由想要两个单独的构建,但可能值得考虑是否可以在运行时做出适当的选择(如果您依赖某些特定于 Windows 的库,例如 WinForms 图表,这可能不起作用) .
【讨论】:
__SOURCE_DIRECTORY__ 遇到了什么问题?不过,这在脚本中更有用 - 我不会在编译的代码中使用它(通常,您需要一个相对于应用程序运行位置的目录,而不是它的编译位置 - 您可以通过当前执行的程序集获得它)。