【问题标题】:How to directly invoke F# compiler on .NET Core?如何在 .NET Core 上直接调用 F# 编译器?
【发布时间】:2019-07-01 12:38:53
【问题描述】:

UPD.:

我想直接从 .NET Core SDK 调用 F# 编译器(即 fsc)。

我知道 dotnet build & co,但是当我只需要编译一个简单的问题时,我不想让他们参与进来,即在 fsc file.fs 就足够的情况下。

我尝试在 .NET Core SDK 中搜索(在我的 Mac 上,它位于 /usr/local/share/dotnet/sdk/2.2.102/FSharp 中)并在那里找到了一个 fsc.exe 文件。不幸的是,当我尝试使用 dotnet /usr/local/share/dotnet/sdk/2.2.102/FSharp/fsc.exe 启动它时,它给了我一个错误:

error FS0193: Could not load file or assembly 'Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

环境:macOS、.NET Core 2.2

【问题讨论】:

  • 如果您投反对票 - 请解释一下。我不明白为什么。
  • 显然您需要使用dotnet fsc.exe 运行它。但是在我这样做之后,它开始抱怨Microsoft.Build.Tasks.v4.0。我不知道如何继续。
  • @ForNeVeR,但我想像 javac 一样使用 fsc。似乎没有一些黑客是不可能的。
  • @isnullxbh 请注意,F# 不会进行单独编译(即分别编译多个 .fs 文件,然后将结果一起链接到输出二进制文件中),因此调用 @987654326 没有多大意义@手动。
  • 在 MacO 上安装 fsc 的步骤非常好documented on the F# website。您是否尝试过那里列出的步骤?

标签: .net .net-core f# fsc


【解决方案1】:

安装 dotnet core (https://dotnet.microsoft.com/download) 后,您应该能够从命令行构建 F# 项目。

cd my-fs-project
dotnet build
dotnet run

【讨论】:

  • 感谢您的帮助!我可以像java编译器(javac)一样使用fsc而不使用dotnet吗?
  • 你可能可以,但使用它的人主要使用 dotnet。与随波逐流相比,你获得帮助的能力会更低。试图在 Java 中重新创建您的体验可能是一个错误。 Java 是最好的 java,F# 是最好的 F#。
  • 这是为大多数用例构建 F# 的正确方法,但实际上并不能回答问题。
【解决方案2】:

可能不想直接调用fsc,因为dotnet buildfsproj 是构建项目的首选方式。

如果您必须这样做,那么可以在 SDK 文件中找到它:

dotnet /usr/share/dotnet/sdk/5.0.100/FSharp/fsc.exe

使用 dotnet --list-sdks 查找您的 SDK 的完整路径。

【讨论】:

    【解决方案3】:

    我在 Linux 上使用fsc 编译如下。

    来自 .NET 6(我在 Gentoo 上,但你可以推断路径)

    dotnet /opt/dotnet-sdk-bin-6.0/sdk/6.0.101/FSharp/fsc.dll test.fs --targetprofile:netcore --target:exe --out:test.exe
    

    来自本地构建fsc

    artifacts/bin/fsc/Debug/net5.0/fsc test.fs --targetprofile:netcore --target:exe --out:test.exe
    

    然后我用以下内容手动创建test.runtimeconfig.json

    {
      "runtimeOptions": {
        "tfm": "net5.0",
        "framework": {
          "name": "Microsoft.NETCore.App",
          "version": "5.0.0"
        },
        "rollForwardOnNoCandidateFx": 2
      }
    }
    

    然后我可以使用dotnet test.exe 运行应用程序。

    【讨论】:

    • 感谢您的回答!我的机器上没有 fsc(作为单独的可执行文件)。你能运行“which fsc”并附加它的输出吗?
    • @isnullxbh 老实说,我在奇怪的发行版上,我使用本地构建的 FSC。我添加了如何使用股票 .NET 6 构建的说明。您可能应该使用来自兄弟答案stackoverflow.com/a/65113119/354473 的路径
    • 好的,谢谢你的信息!
    猜你喜欢
    • 2019-12-20
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多