在F#类型提供程序中使用AddXmlDocComputed

时间:2014-03-19 13:27:53

标签: f# type-providers

我有一个类型提供程序,它提供静态属性,但文档可能会在整个时间间隔内发生变化。我有以下属性设置。

let prop = ProvidedProperty("Test", typeof<string>,
                            IsStatic = true,
                            GetterCode = fun args -> <@@ "Test" @@>)

然后我尝试使用AddXmlDocComputed添加一些文档,如下所示

let GetDocumentation () = "Test documentation"

do prop.AddXmlDocComputed(GetDocumentation)

但是,我在Intellisense评论中没有显示任何文字。然后我在GetDocumentation函数中引发了一个异常,它通过添加[<Note>]反映在intellisense中,并且消息说它来自对GetDocumentation的调用。我还尝试使用AddXmlDocAddXmlDocDelayed,两者都按预期添加了文档。

所以这导致我的问题是,是否有人有使用AddXmlDocComputed的经验,为什么我当前的实现不会向该属性添加任何文档?

修改
我现在已经尝试调试VS2013实例,并且可以看到正在调用文档并且正在通过该属性的类型提供程序传递期望的字符串,但是,在Intellisense窗口中仍然没有出现文档。

1 个答案:

答案 0 :(得分:0)

我认为这是ProvidedTypes.fs中的错误。解释是,GetCustomAttributesData()中的type CustomAttributesImpl()实际上从未实际返回计算的XML doc属性。它不是将属性作为属性数组的一部分返回,而是添加到内部属性列表中(我假设不小心)。

要在本地解决问题,请使用以下代码替换实现:

member __.GetCustomAttributesData() = 
    [| yield! customAttributesOnce.Force()
       match xmlDocAlwaysRecomputed with None -> () | Some f -> yield mkXmlDocCustomAttributeData (f())  |]
    :> IList<_>

我已经使用修复程序在GitHub上发出了拉取请求。

<强>更新

修复程序已合并到FSharp.TypeProviders.StarterPack的主分支中。