【问题标题】:Any reason not to mark a DLL as CLSCompliant?有什么理由不将 DLL 标记为 CLSCompliant?
【发布时间】:2011-08-08 12:56:53
【问题描述】:

我目前正在测试 Ndepend,它警告我程序集应标记为 CLSCompliant。

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

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

请注意,我不是在问 CLSCompliant 是什么意思,这里介绍了:What is the 'CLSCompliant' attribute in .NET?

【问题讨论】:

  • 实际上标记您的程序集是 Bill Wagner 对“有效 C#”中代码改进的建议 - 如果您需要为您的老板提供论据。见:amazon.com/Effective-Specific-Ways-Improve-Your/dp/…
  • FxCop 建议也将程序集标记为符合 CLS。也就是说,请注意,您可以将程序集标记为整体符合 CLS,然后使用 [CLSCompliant(false)] 属性排除这些程序集中的单个类型或成员。如果您还想从 3rd 方库中返回或接受某些自身不符合 CLS 的类型,则这可能是必要的。

标签: c# cls-compliant


【解决方案1】:

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

所以:如果它对您没有任何价值无论如何,那么坦率地说:关闭该规则。如果您可以免费添加它(除了属性之外没有代码更改),那么也许可以 - 但一切都是平衡的 - 努力与结果。如果这里没有收获,就不要投入时间。

如果您是图书馆作者(商人或 OSS),那么您应该关注它。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2020-05-12
        • 2013-08-31
        • 2021-01-09
        • 1970-01-01
        • 1970-01-01
        • 2013-06-27
        • 2013-04-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多