This tool allows package FSX files as self-contained executables.
Installation:
dotnet tool install --global FSharpPacker
Nix (Nix/NixOS)
Nix w/ Flakes
nix profile install github:kant2002/FSharpPacker
Run without installing
nix run github:kant2002/FSharpPacker -- --help
USAGE: fspack <file> [--help] [--framework <framework>] [--verbose] [--noselfcontained] [--aot]
FILE:
<file> .fsx file to convert to executable file
OPTIONS:
--framework, -f <framework>
Specify target framework (e.g. net6.0)
--verbose, -v Verbose output
--noselfcontained, -nsc
Don't publish as self-contained (with dotnet runtime included)
--singefile, -sf Produce single file
--aot, -aot Enable AOT-compilation
--help display this list of options.
Please note that the app is produced as self-contained by default.
Simple usage:
fspack fsx-file.fsx [<additional arguments to dotnet publish>]
For example:
fspack FSharpPacker.Tests\Samples\LoadFile.fsx -o test -r win-x64
test\LoadFile.exe
for AOT build
fspack FSharpPacker.Tests\Samples\LoadFile.fsx -aot -o test-aot -r win-x64 -f net7.0
test-aot\LoadFile.exe
Self-contained with dotnet 7 and a single-file executable:
fspack FSharpPacker.Tests/Samples/LoadFile.fsx -o test-single-file -r win-x64 -f net7.0 -sf -p:EnableCompressionInSingleFile=true
test-single-file\LoadFile.exe
Directive | Status | Notes |
---|---|---|
#load | ✅ | |
#r "path\file.dll" | ✅ | |
#r "nuget: package" | ✅ | |
#r "nuget: package, version" | ✅ | |
#load | ✅ | |
#i "nuget: source-feed" | ✅ | |
#quit | ✅ | |
#r "custom: custom-path" | ⬜ | This is tricky and require deep involvement with FSharp.Compiler.Services |
#I "custom: custom-path-search-hint" | ⬜ |
Directive |
---|
#help |
#time |
dotnet pack FSharpPacker.FSharp -c Release
dotnet tool install FSharpPacker --global --add-source FSharpPacker.FSharp\bin\Release\
dotnet tool uninstall -g FSharpPacker