2016-03-02 3 views
1

Я пытаюсь использовать FAKE для создания моего проекта F #. build.fsx выглядит ниже и отлично работает.FAKE ошибка при попытке использования Fake.FscHelper

#r "packages/FAKE/tools/FakeLib.dll" 

open Fake 

Target "Default" (fun _ -> 
    trace "Hello World from FAKE" 
) 

RunTargetOrDefault "Default" 

Тогда я хочу использовать fsc из FAKE. После официального учебника, я добавил одну строку 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" 

Я признателен, если кто может дать мне совет.

Я использую код VS на Mac с 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) 

ответ

4

Это происходит потому, что модуль FscHelper определяет конструктор под названием Target (see source), и что конструктор конфликтует с Target функции от TargetHelper модуля. Существует issue filed about it.

Пока проблема не будет устранена, существует три способа решения этой двусмысленности:

  1. Не открывайте FscHelper, просто использовать все его внутренности в квалифицированно (например, FscHelper.Compile и т.д.)

  2. Re-псевдоним TargetHelper.Target функции в локальной области:

    open Fake 
    open Fake.FscHelper 
    
    let Target = TargetHelper.Target 
    
    Target "Default" (fun _ -> 
        trace "Hello World from FAKE" 
    ) 
    
  3. Р eorder в open заявления:

    open Fake.FscHelper 
    open Fake 
    

И так как вы используете этот помощник, обратите внимание, что documentation для него является outdated. В частности, задача Fsc устарела в пользу задачи Compile (see source).

+0

Спасибо! Задача решена. – Joka

2

Изменить порядок открытых заявлений

#r @"packages/FAKE/tools/FakeLib.dll" 
open Fake.FscHelper 
open Fake 

Target "a" (fun _ -> 
    ["a.fs"] |> Compile [] 

Порядка открытых заявлений определяет приоритет разрешения имен с более поздними открытыми модулями и пространство имен с прецедентом.

Смежные вопросы