似乎XML文档适用于大多数情况,但并非总是如此。我想让Intellisense完全可用于为与C#进行互操作而设计的部件。所以,这是一个小的(也许有点人为的)例子:
///<summary>Well, it's a summary</summary>
type Summary = {
///<summary>Gets a short name</summary>
Name : string;
///<summary>Gets whether the action was successful or not</summary>
IsSuccessful : bool;
}
///<summary>Represents path filtering action</summary>
type IPathFilter =
///<summary>Runs the filtering through the list of <paramref name="paths"/></summary>
///<param name="paths">A sequence of paths to check</param>
///<returns>A sequence of <see cref="Summary"/></returns>
abstract member Run : seq<string> -> seq<Summary>
///<summary>A default filter</summary>
type PathFilter =
///<summary>Runs the filtering through the list of <paramref name="paths"/></summary>
///<param name="paths">A sequence of paths to check</param>
///<returns>A sequence of <see cref="Summary"/></returns>
member this.Run paths=
paths |> Seq.map (fun s -> FileInfo(s)) |> Seq.map (fun f -> { Name = f.Name; IsSuccessful = f.Exists; })
interface IPathFilter with
///<summary>Runs the filtering through the list of <paramref name="paths"/></summary>
///<param name="paths">A sequence of paths to check</param>
///<returns>A sequence of <see cref="Summary"/></returns>
member this.Run paths =
this.Run paths
类和接口只适用于C#interop,它是F#库中发生的所有神奇内容的外观,因此我不必将F#特定的东西暴露给C#。在C#端提供完整的文档会很好,这让我想到了两个问题:
有没有办法在Intellisense中记录和显示记录属性?如果我将鼠标悬停在类型本身上,一切正常,但似乎没有拾取属性:
有没有办法对抽象方法进行“完整”描述?我知道,从F#侧来看,它们只被描述为功能签名。不幸的是,这意味着如果我使用界面,我会得到关于该方法的不完整的文档;参数名称和描述将丢失:
与原始类文档相比:
我能做些什么,或者我应该学会忍受它? :)
正如Gustavo所述,记录文档似乎在F#端工作正常(使用VS2012 Professional检查):
不幸的是,在C#中
:(
答案 0 :(得分:2)
请注意,如果您没有summary
和params
等其他标记,则可以省略returns
标记。所以这个:
///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>
答案 1 :(得分:1)
正如PatrykĆwiek在上述评论中指出的那样,微软已经证实这是一个错误。只是为了澄清实际发生的情况:当F#编译器生成文档文件时,它实际上记录了内部字段而不是记录成员的公共属性。
例如,上面的Summary
类型的文档生成为:
...
<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:
,Visual Studio会立即在C#项目中显示注释。因此,在修复此错误并实际为属性生成文档之前,您唯一的选择是在构建后步骤中手动处理文档文件。
顺便说一句,这也解释了为什么它在F#中工作:显然,Visual Studio的F#绑定使用该字段来查找文档。这甚至适用于几个F#库,尽管该字段具有内部可见性。
更新:应使用F#3.1.2修复此错误。另请参阅the release notes。