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