F#类型推断需要类型名称,但我不知道如何提供它

时间:2015-01-09 00:43:42

标签: f# f#-fake

我是一个F#noob,所以我正在努力学习一些基本的东西。这里的上下文是一个FAKE构建脚本。

我正在尝试使用AssemblyInfoFile命名空间生成 AssemblyInfo.cs ,而不包括生成的internal类。我知道我需要调用CreateCSharpAssemblyInfoWithConfig函数并通过AssemblyInfoFileConfig来关闭GenerateClass属性。我有这个:

Target "Build" (fun _ ->
    CreateCSharpAssemblyInfoWithConfig (srcDir + "TestAssemblyInfo.cs")
        [Attribute.Version version
         Attribute.Configuration configuration]
        { GenerateClass = false }
)

但编译器抱怨如下:

  

“AssemblyInfoParams”类型与“AssemblyInfoFileConfig”类型不兼容。

起初我以为我只需要为编译器提供特定类型,以便它不会解析为AssemblyInfoParams。但是,我无法弄清楚如何内联,所以我尝试了这个:

Target "Build" (fun _ ->
    let config : AssemblyInfoFileConfig = { GenerateClass = false }

    CreateCSharpAssemblyInfoWithConfig (srcDir + "TestAssemblyInfo.cs")
        [Attribute.Version version
         Attribute.Configuration configuration)]
        config
)

但现在编译器抱怨如下:

  

类型'AssemblyInfoFileConfig'不包含字段'GenerateClass'

查看AssemblyInfoFileConfig的定义,它显然包含名为GenerateClass属性

type AssemblyInfoFileConfig
    (
      generateClass : bool,
      ?useNamespace : string ) =
        member x.GenerateClass = generateClass
        member x.UseNamespace =
            match useNamespace with
            | Some n -> n
            | None -> "System"
        static member Default = AssemblyInfoFileConfig(true)

谁能告诉我这里我做错了什么?

1 个答案:

答案 0 :(得分:4)

AssemblyInfoFileConfig不是记录 - 它是带有构造函数的更标准类型。

您可以这样称呼它:

let config = AssemblyInfoFileConfig(false)