2014-03-19 39 views
4

我有一個類型提供程序,它提供了一個靜態屬性,但文檔隨時會在整個循環中重複更改。我有以下屬性設置。在F#類型提供程序中使用AddXmlDocComputed

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

然後我試着一些文檔添加到它與AddXmlDocComputed如下

let GetDocumentation() = "Test documentation" 

do prop.AddXmlDocComputed(GetDocumentation) 

但是,我沒有得到任何的智能感知評論顯示的文本。然後,我在GetDocumentation函數中提出了一個異常,這反映在intellisense中,通過添加[<Note>]和消息說它來自GetDocumentation的調用。我也嘗試使用AddXmlDocAddXmlDocDelayed,兩者都按預期添加了文檔。

因此,這導致我的問題是否有任何人使用AddXmlDocComputed的經驗,爲什麼我目前的實施不添加任何文檔的財產?

編輯:
我現在已經嘗試過調試VS2013實例,可以看到該文件被調用和期望的字符串正在通過該屬性的類型提供過去了,但仍然沒有文檔出現在Intellisense窗口中。

+0

我沒有使用'AddXmlDocComputed',恐怕。它如何與'AddXmlDocDelayed'在功能上有所不同? – mavnn

+0

使用'AddXmlDocDelayed'時,即使在調用「Invalidate」時,文檔似乎也被緩存。我的印象是,如果調用'AddXmlDocComputed'將導致文檔發生變化,應該調用Invalidate'。 – bruinbrown

+0

您是否試圖在ProvidedTypes.fs中進行調試? –

回答

0

我認爲這是ProvidedTypes.fs中的一個錯誤。解釋是當GetCustomAttributesData()type CustomAttributesImpl()中時,計算的XML文檔屬性從未實際返回。不是將屬性作爲屬性數組的一部分返回,而是將其添加到屬性的內部列表中(無意中我假設)。

要在本地解決此問題,使用此代碼替換實施:

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

我已經發出了與固定在GitHub上拉請求。

更新

的修復已經被合併到的FSharp.TypeProviders.StarterPack主分支。

相關問題