我正在尝试使用FAKE来构建我的F#项目。
build.fsx
如下所示,效果很好。
#r "packages/FAKE/tools/FakeLib.dll"
open Fake
Target "Default" (fun _ ->
trace "Hello World from FAKE"
)
RunTargetOrDefault "Default"
然后我想从FAKE使用fsc。在官方教程之后,我添加了一行open Fake.FscHelper
并得到以下错误消息:
#r "packages/FAKE/tools/FakeLib.dll"
open Fake
open Fake.FscHelper
// this value is not a function and can not be applied
// union case FscParam.Target: TargetType -> FscParam
Target "Default" (fun _ ->
~~~~~~~~~~~~~~~~
trace "Hello World from FAKE"
)
RunTargetOrDefault "Default"
如果有人能给我任何建议,我感激不尽。
我正在使用Mono 4.2.1在Mac上使用VS Code。
我的paket.lock
如下所示:
NUGET
remote: https://www.nuget.org/api/v2
specs:
FAKE (4.21.0)
FSharp.Core (4.0.0.1)
FsUnit (2.0.0)
FSharp.Core (>= 3.1.2.5)
NUnit (3.0.1)
NUnit (3.0.1)
答案 0 :(得分:4)
这是因为模块How many times would you like to flip the coins?
2
H T
H H
定义了一个名为FscHelper
(see source)的构造函数,并且该构造函数与Target
模块中的Target
函数冲突。有issue filed about it。
在问题得到解决之前,有三种方法可以解决这种歧义:
不要打开TargetHelper
,只要以合格的方式使用其内部文件(例如FscHelper
等)。
对本地范围内的FscHelper.Compile
函数进行重新别名:
TargetHelper.Target
重新排序open Fake
open Fake.FscHelper
let Target = TargetHelper.Target
Target "Default" (fun _ ->
trace "Hello World from FAKE"
)
语句:
open
由于您正在使用此帮助程序,请注意documentation为outdated。特别是,open Fake.FscHelper
open Fake
任务已弃用,以支持Fsc
任务(see source)。
答案 1 :(得分:2)
更改公开声明的顺序
#r @"packages/FAKE/tools/FakeLib.dll"
open Fake.FscHelper
open Fake
Target "a" (fun _ ->
["a.fs"] |> Compile []
open语句的顺序决定了名称解析的优先级,后面打开的模块和名称空间是先例。