通过将程序集标记为符合[< assembly:CLSCompliant(true)>]的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#生成的程序集是否合规?
最佳答案 从
this MSDN page开始,您可以看到该属性旨在将该类标记为合规,而不是为了确保合规性.确保合规性是编译器可能实现或不实现的内容.
检查Microsoft和FSharp的存储库,您可以看到CLSCompliant属性从不用于检查合规性.只是为了将类标记为兼容,所以这种行为是正常的.
目前我没有找到任何工具在F#中进行此分析.我打开an issue以查看此功能是否足以在编译器中实现.如果是,我们都可以帮助完成它.如果不是,另一种选择是编写分析器并将其作为VS插件发布.无论哪种方式,我都会在有关此主题的任何新闻中更新此答案.