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

F# type inference needs type name but I don't know how to provide it

我是 F# 菜鸟,所以我在努力让一些基本的东西发挥作用。这里的上下文是一个伪造的构建脚本。

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

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

但是编译器报错如下:

The type 'AssemblyInfoParams' is not compatible with the type 'AssemblyInfoFileConfig'.

起初我以为我只需要向编译器提供特定类型,这样它就不会解析为 AssemblyInfoParams。但是,我不知道如何内联,所以我尝试了这个:

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

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

但是现在编译器报错如下:

The type 'AssemblyInfoFileConfig' does not contain a field 'GenerateClass'

查看 AssemblyInfoFileConfig 的定义,它显然包含一个名为 GenerateClass:

property
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)

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

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

你可以这样称呼它:

let config = AssemblyInfoFileConfig(false)