Я попытался воспроизвести это, запустив компилятор из командной строки в Windows.В исходном файле fsx
есть две незначительные ошибки.Во-первых, вы открываете неправильное пространство имен:
#r "chess.dll"
#r "pieces.dll"
open Chess
open Pieces // <- This should be open 'Piece'
Во-вторых, коллекция pieces
должна быть списком, а не массивом:
let pieces =
[ king (White) :> chessPiece
rook (White) :> chessPiece
king (Black) :> chessPiece
rook (Black) :> chessPiece ]
С этими двумя изменениями яудалось скомпилировать все:
fsharpc --target:library chess.fs
fsharpc --target:library -r:chess.dll pieces.fs
fsharpc chessApp.fsx
Обратите внимание, что вам нужно --target:library
, чтобы указать, что это должно создать файл dll
, а также -r:chess.dll
для второго файла, чтобы сказать, что он должен ссылатьсяпервый dll
.
Было бы намного проще, если бы вы ссылались на два других файла как исходные файлы, используя #load
, а не как скомпилированные файлы, используя #r
:
#load "chess.fs"
#load "pieces.fs"
Затем вы можете скомпилировать все это, просто запустив fsharpc chessApp.fsx
, и вы получите один отдельный исполняемый файл.