如何在.NET Core 上直接调用F#编译器?
How to directly invoke F# compiler on .NET Core?
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 核心 (https://dotnet.microsoft.com/download) 后,您应该能够从命令行构建 F# 项目。
cd my-fs-project
dotnet build
dotnet run
您 可能 不想直接调用 fsc
,因为 dotnet build
和 fsproj
是构建项目的首选方式。
如果你必须,那么可以在 SDK 文件中找到它:
dotnet /usr/share/dotnet/sdk/5.0.100/FSharp/fsc.exe
使用 dotnet --list-sdks
找到您的 SDK 的完整路径。
我按以下方式在 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
申请。
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 核心 (https://dotnet.microsoft.com/download) 后,您应该能够从命令行构建 F# 项目。
cd my-fs-project
dotnet build
dotnet run
您 可能 不想直接调用 fsc
,因为 dotnet build
和 fsproj
是构建项目的首选方式。
如果你必须,那么可以在 SDK 文件中找到它:
dotnet /usr/share/dotnet/sdk/5.0.100/FSharp/fsc.exe
使用 dotnet --list-sdks
找到您的 SDK 的完整路径。
我按以下方式在 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
申请。