FAKE CscHelper:Csc vs csc?

时间:2016-01-06 17:57:05

标签: f# f#-fake

我不明白这两者之间的区别。

我想使用FAKE的CscHelper将单个c#文件编译成dll。这是我的构建文件:

// include Fake lib
#r @"packages/FAKE/tools/FakeLib.dll"
open Fake
open CscHelper

Target "Default" (fun _ ->
    ["Discover.cs"] |> csc (fun p -> { p with Output="Discover.dll"; Target=Library })
)

RunTargetOrDefault "Default"

这是我得到的错误:

build.fsx(7,24): error FS0001: Type mismatch. Expecting a
    string list -> unit
but given a
    string list -> int
The type 'unit' does not match the type 'int'

如果我用“Csc”替换“csc”,它会正确编译。为什么?在文档中,除了单个字符之外,代码示例在字面上是完全相同的。方法签名看起来与返回类型不同。为什么有两种变体,如何使小写的变体工作?

1 个答案:

答案 0 :(得分:0)

小写形式是正确的。您始终可以将结果传递给ignore函数,以确保返回unit()。

// include Fake lib
#r @"packages/FAKE/tools/FakeLib.dll"
open Fake
open CscHelper

Target "Default" (fun _ ->
    ["Discover.cs"] |> csc (fun p -> { p with Output="Discover.dll"; Target=Library }) |> ignore
)

RunTargetOrDefault "Default"

实际的工具提示会告诉您发生了什么(它返回退出状态代码,其类型为int):

  

类型不匹配。期待一个       '字符串列表 - >单元'
  但给了一个       '字符串列表 - > INT'
  类型'单位'与类型' int'不匹配   val csc:setParams:(CscParams - > CscParams) - > inputFiles:string list - > INT   全名:Fake.CscHelper.csc   使用指定的参数编译给定的C#源文件。

     

参数

     
      
  • setParams - 用于覆盖默认CSC参数的函数。
  •   
  • inputFiles - C#输入文件。
  •   
     

返回

     

编译过程的退出状态代码

     

样品

     

[" file1.cs&#34 ;; " file2.cs"] |> csc(有趣的参数 - > {带有Output = ... Target = ......}的参数)

你可能已经发现了这一点,但很高兴每个人都知道有选择。谢谢。美好的一天。