有什么理由不将DLL标记为CLSCompliant?

我目前正在测试Ndepend,它给了我一个警告,即程序集应该标记为CLSCompliant。

我们的项目都是C#,所以并不是真的需要它。

我想知道的是:将dll标记为clscompliant是否有任何负面影响,或者我应该禁用警告?

注意我不是在问这里有什么CLSCompliant意味着什么 : .NET中的’CLSCompliant’属性是什么?

这是其中一个微妙的案例……对于无法控制调用者是谁的图书馆作者而言,CLS合规可能是重要的。 在你的情况下,你说“我们的项目都是C#”,在这种情况下你是对的:它是不需要的。 它添加了限制(例如,在无符号类型上),这些限制可能(或可能不会)以最明显的方式影响表示数据。

所以:如果它没有给你增加任何价值,那么坦率地说:关闭那条规则。 如果你可以免费添加它(除了属性没有代码更改),那么也许没问题 – 但一切都是平衡 – 努力与结果。 如果这里没有收益,不要投入时间。

如果您是图书馆作者(商家或OSS),那么您应该遵循它。

有几个C#function不符合CLS,例如无符号类型。 由于几种语言不区分大小写,因此必须没有仅按大小写不同的类型和成员,例如MyObjectmyObject ,以及其他一些function。 因此,如果您不打算使用其他.NET语言,则没有理由将您的代码标记为CLSCompliant

当您的代码标记为CLSCompliant ,唯一的负面影响是编译器错误,但事实并非如此。