尝试使用 Fake.FscHelper 时出现 FAKE 错误
FAKE error when trying to use Fake.FscHelper
我正在尝试使用 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"
如果有人能给我任何建议,我将不胜感激。
我在 Mac 上使用 VS Code 和 Mono 4.2.1。
我的 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)
发生这种情况是因为模块 FscHelper
定义了一个名为 Target
的构造函数(see source), and that constructor conflicts with the Target
function from the TargetHelper
module. There is an issue filed about it.
在问题得到解决之前,可以通过三种方法解决这个问题:
不要打开FscHelper
,只要合格地使用它的所有内脏(例如FscHelper.Compile
等)
在本地范围内重新命名 TargetHelper.Target
函数:
open Fake
open Fake.FscHelper
let Target = TargetHelper.Target
Target "Default" (fun _ ->
trace "Hello World from FAKE"
)
重新排序 open
语句:
open Fake.FscHelper
open Fake
并且由于您正在使用此助手,请注意 documentation for it is outdated. In particular, the Fsc
task is deprecated in favor of the Compile
task (see source).
更改打开语句的顺序
#r @"packages/FAKE/tools/FakeLib.dll"
open Fake.FscHelper
open Fake
Target "a" (fun _ ->
["a.fs"] |> Compile []
打开语句的顺序决定了名称解析的优先级,以后打开的模块和命名空间优先。
我正在尝试使用 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"
如果有人能给我任何建议,我将不胜感激。
我在 Mac 上使用 VS Code 和 Mono 4.2.1。
我的 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)
发生这种情况是因为模块 FscHelper
定义了一个名为 Target
的构造函数(see source), and that constructor conflicts with the Target
function from the TargetHelper
module. There is an issue filed about it.
在问题得到解决之前,可以通过三种方法解决这个问题:
不要打开
FscHelper
,只要合格地使用它的所有内脏(例如FscHelper.Compile
等)在本地范围内重新命名
TargetHelper.Target
函数:open Fake open Fake.FscHelper let Target = TargetHelper.Target Target "Default" (fun _ -> trace "Hello World from FAKE" )
重新排序
open
语句:open Fake.FscHelper open Fake
并且由于您正在使用此助手,请注意 documentation for it is outdated. In particular, the Fsc
task is deprecated in favor of the Compile
task (see source).
更改打开语句的顺序
#r @"packages/FAKE/tools/FakeLib.dll"
open Fake.FscHelper
open Fake
Target "a" (fun _ ->
["a.fs"] |> Compile []
打开语句的顺序决定了名称解析的优先级,以后打开的模块和命名空间优先。