如何知道 .fsx 脚本是被 .NETCore/.NET5 还是遗留框架运行?

How to know if .fsx script being run by .NETCore/.NET5 or by legacy framework?

我的 .fsx 脚本有点旧,所以它们只能与 .NET4.x 一起使用,这意味着我需要在 macOS 中使用 fsharpi 命令 运行 它们。

现在我正在考虑开始将它们迁移到 dotnet fsi;但是,理想情况下,我可以找到一种方法 运行 在过渡期间以两种方式同时使用它们。

所以我希望,在它们里面,我可以做一些像这样的条件代码:

#if NET5_0
System.Console.WriteLine "we're running in dotnet fsi, yay"
#else
System.Console.WriteLine "we're running with fsharpi, legacy"
#endif

但它不起作用,令人惊讶(我说令人惊讶是因为许多文档页面中都提到了定义 NET5_0)。关于如何检测到这个的任何其他想法?

我认为 System.Environment.Version 会为您提供所需的信息:

if System.Environment.Version.Major >= 5 then
    System.Console.WriteLine "we're running in dotnet fsi, yay"
else
    System.Console.WriteLine "we're running with fsharpi, legacy"

看起来 NET5_0 只是为 C# 定义的。