2015-09-15 51 views
4

通過使用[<assembly: CLSCompliant(true)>]標記程序集符合CLS我期望編譯器在程序集不符合時發出警告。但是,我可以編譯以下內容如何驗證F#代碼是否符合CLS

type public Test() = 
    member x.intA = 0; 
    member x.INTA = 2; 
    member x.MyMethod() = 8; 
    member x.MYMETHOD() = 10; 

沒有任何警告什麼那麼。使用F#4.0的目標框架是4.6。我錯過了什麼,或者它是編譯器中的錯誤?是否有任何其他方式來驗證從F#生成的程序集是否符合要求?

+2

符合CLS標準組件的公共字段和方法不能僅因套管而不同。 /編輯:這是一個評論的答案,問我爲什麼期望它發出警告。評論從那以後被刪除了。 – hvidgaard

+1

事實上,我只是把它留在那裏,以防其他人想知道相同的情況。我不想將它添加到問題中,因爲任何使用CLS合規性的人都很明顯。換句話說,這對於真正有能力回答的人來說會是一種噪音。 – hvidgaard

回答

2

this MSDN page您可以看到該屬性旨在將該類標記爲符合並且不確保符合性。確保合規性是編譯器可能執行或可能不執行的事情。

檢查MicrosoftFSharp的存儲庫,您可以看到CLSCompliant屬性永遠不會用於檢查合規性。只是爲了將課程標記爲合規,所以這種行爲是正常的。

目前我沒有發現任何可以在F#中進行分析的工具。我打開了an issue以查看此功能是否足以在編譯器中實現。如果是這樣,我們都可以幫助完成。如果不是,另一種選擇是編寫一個分析器並將其作爲VS插件發佈。無論哪種方式,我會保持這個答案更新關於這個問題的任何新聞。

+0

通過我的問題,我決定將此標記爲答案,儘管它沒有明確地回答它,但它提供了足夠的信息來確定F#並自動檢查CLS合規性目前是不可能的。 – hvidgaard

相關問題