【问题标题】:How to know if .fsx script being run by .NETCore/.NET5 or by legacy framework?如何知道 .fsx 脚本是由 .NETCore/.NET5 还是由旧框架运行?
【发布时间】:2022-01-21 13:06:37
【问题描述】:

我的 .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)。关于如何检测到这一点的任何其他想法?

【问题讨论】:

    标签: .net scripting f# .net-5 fsx


    【解决方案1】:

    我认为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# 定义的。

    【讨论】:

    • 不幸的是,这适用于条件代码,但不适用于 #load、#r 等预处理器指令:(对于后者还有其他想法吗?
    • 好点。这里有一个想法:您可以在从命令行运行脚本时自己定义NET5_0dotnet fsi --define:NET_50。那么你的原始代码 (#if NET5_0) 应该可以工作了。
    猜你喜欢
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多