尝试使用Fake.FscHelper时出现FAKE错误

时间:2016-03-02 02:14:29

标签: f# f#-fake

我正在尝试使用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)

2 个答案:

答案 0 :(得分:4)

这是因为模块How many times would you like to flip the coins? 2 H T H H 定义了一个名为FscHelpersee source)的构造函数,并且该构造函数与Target模块中的Target函数冲突。有issue filed about it

在问题得到解决之前,有三种方法可以解决这种歧义:

  1. 不要打开TargetHelper,只要以合格的方式使用其内部文件(例如FscHelper等)。

  2. 对本地范围内的FscHelper.Compile函数进行重新别名:

    TargetHelper.Target
  3. 重新排序open Fake open Fake.FscHelper let Target = TargetHelper.Target Target "Default" (fun _ -> trace "Hello World from FAKE" ) 语句:

    open
  4. 由于您正在使用此帮助程序,请注意documentationoutdated。特别是,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语句的顺序决定了名称解析的优先级,后面打开的模块和名称空间是先例。