F# 接口方法和记录属性的XML文档

F# 接口方法和记录属性的XML文档,f#,intellisense,c#-to-f#,F#,Intellisense,C# To F#,XML文档似乎在大多数情况下都能正常工作,但并非总是如此。我想让Intellisense完全可用于设计用于与C#互操作的部件。因此,这里有一个小的(也许有点做作的)例子: ///这是一个总结 类型摘要={ ///获取一个短名称 名称:字符串; ///获取操作是否成功 IsSuccessful:bool; } ///表示路径筛选操作 IPATH型过滤器= ///在列表中运行筛选 ///要检查的一系列路径 ///一连串 摘要成员运行:seq->seq ///默认过滤器 类型路径过滤器= ///在列表

XML文档似乎在大多数情况下都能正常工作,但并非总是如此。我想让Intellisense完全可用于设计用于与C#互操作的部件。因此,这里有一个小的(也许有点做作的)例子:

///这是一个总结
类型摘要={
///获取一个短名称
名称:字符串;
///获取操作是否成功
IsSuccessful:bool;
}
///表示路径筛选操作
IPATH型过滤器=
///在列表中运行筛选
///要检查的一系列路径
///一连串
摘要成员运行:seq->seq
///默认过滤器
类型路径过滤器=
///在列表中运行筛选
///要检查的一系列路径
///一连串
成员。运行路径=
路径|>Seq.map(fun s->FileInfo(s))|>Seq.map(fun f->{Name=f.Name;issessful=f.Exists;})
IPathFilter与的接口
///在列表中运行筛选
///要检查的一系列路径
///一连串
此成员。运行路径=
这个。运行路径
该类和接口仅用于C#interop,它是F#库中发生的所有神奇事物的外观,因此我不必向C公开F#特定的事物。如果能在C#端提供完整的文档就好了,这就引出了我的两个问题:

  • 是否有一种方法可以在Intellisense中记录和显示记录属性?如果我将鼠标悬停在类型本身上,则一切正常,但属性似乎无法拾取:

  • 有没有办法对抽象方法进行“完整”的描述?我知道,从F#方面来说,它们只被描述为函数签名。不幸的是,这意味着如果我使用这个接口,我会在这个方法上得到不完整的文档;参数名称和说明将丢失:

    与原始类文档相比:

  • 有什么我能做的吗,或者我应该学会接受它吗?:)


    [编辑] 正如Gustavo所指出的,记录文档在F#端似乎运行良好(使用VS2012 Professional进行检查):

    不幸的是,相同的文档在C#中不可见:


    :(

    请注意,如果没有其他标记,例如
    params
    returns
    ,则可以省略
    summary
    标记。因此:

    ///Well, it's a summary
    type Summary
    
    相当于:

    ///<summary>Well, it's a summary</summary>
    type Summary
    
    ///这是一个总结
    类型摘要
    
    1) VS2012中记录字段的工作说明:

    2) 您可以在如下抽象方法中使用参数名称:

    type IPathFilter =
        abstract member Run : paths:seq<string> -> seq<Summary>
    
    类型IPathFilter=
    抽象成员运行:路径:seq->seq
    
    正如PatrykĆwiek在上面的评论中指出的,微软已经确认这是一个bug。只是为了澄清实际发生的情况:当F#编译器生成文档文件时,它实际上记录了内部字段,而不是记录成员的公共属性

    例如,上面的
    摘要
    类型的文档生成为:

    ...
    <member name="F:Test.Summary.IsSuccessful">
       <summary>Gets whether the action was successful or not</summary>
    </member>
    <member name="F:Test.Summary.Name">
       <summary>Gets a short name</summary>
    </member>
    <member name="T:Test.Summary">
       <summary>Well, it's a summary</summary>
    </member>
    ...
    
    。。。
    获取操作是否成功
    获取一个短名称
    嗯,这是一个总结
    ...
    
    请注意成员名称文档中的
    F:
    前缀。将其更改为
    P:
    ,VisualStudio会立即在您的C#项目中显示注释。因此,在修复此错误并为属性实际生成文档之前,您唯一的选择是在构建后步骤中手动处理文档文件

    顺便说一下,这也解释了为什么它在F#中工作:显然,visualstudio的F#绑定使用该字段来查找文档。这甚至可以在几个F#库中使用,尽管该字段具有内部可见性


    更新:这个错误应该用F#3.1.2修复。另请参见。

    感谢第2点中的提示。遗憾的是,不可能记录字段不能被记录,毕竟这些是get only属性。。。我知道
    //
    速记,但它根本不适用于
    ,所以大多数时候我习惯于只在没有交叉引用的纯文本中使用完整的
    版本和
    //
    。谢谢你把事情弄清楚!事实上,我重新测试了这个,并且记录字段在VS2012Oh中可以工作,好的,我使用的是VS2013,我不知道它是否有任何区别。我还将检查记录文档是否在C#中可见……是的,我现在没有访问VS2013的权限,但我想我第一次使用VS2013进行了测试。也许这是VS2013中引入的一个bug。让我们知道是的,检查过了。如果您的版本签出,文档在F#中可见,但在C#中不太可见。。。不知道为什么:(
    ...
    <member name="F:Test.Summary.IsSuccessful">
       <summary>Gets whether the action was successful or not</summary>
    </member>
    <member name="F:Test.Summary.Name">
       <summary>Gets a short name</summary>
    </member>
    <member name="T:Test.Summary">
       <summary>Well, it's a summary</summary>
    </member>
    ...