2015-09-15 26 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

相关问题