Как напрямую вызвать компилятор F# на.NET Core?

UPD.:

Я хочу напрямую вызывать компилятор F# (т.е. fsc) из.NET Core SDK.

Я знаю о 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

3 ответа

Решение

После установки ядра 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 следующим образом.

Из .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.

Другие вопросы по тегам