【问题标题】:How to mark .NET Standard code as CLS-compliant?如何将 .NET Standard 代码标记为符合 CLS?
【发布时间】:2018-02-28 09:53:28
【问题描述】:

标题说明了一切 - 如何将 .NET 标准库标记为符合 CLS?

我用 C# 编写了一个针对 .NET Standard 1.0 框架的简单库。它包括两个枚举:

public enum Alignments { Left, Center, Right }
public enum Actions { None, Total, Average, Count }

当我尝试在 .NET 4.6 项目中使用该库时,它会将枚举标记为不符合 CLS:

警告 CS3001 参数类型“操作”不符合 CLS

我无法向 AssemblyInfo.cs 添加任何内容,因为 .NET 标准不使用它。它似乎也不支持作为 .csproj 文件中的属性。

【问题讨论】:

  • 你不能把属性放在你项目的任何类中吗?
  • 将属性添加到枚举会导致新警告:Warning CS3014 'Alignments' cannot be marked as CLS-compliant because the assembly does not have a CLSCompliant attribute - 看图。于是我翻遍了文档,找到了答案:你把[assembly: CLSCompliant(true)]语句放在了常规代码中。感谢您的帮助!
  • [CLSCompliant] 十年前就不再有用了,JScript 的停产给它的棺材钉上了最后一颗钉子。为什么将它添加到使用该库的程序集中?永远不要写你不懂的代码,把它删掉。
  • @HansPassant - 您能否详细说明CLSCompliant 不再有用(可能是链接)?例如,将其用于与 VB.NET 的兼容性是否仍然有意义?
  • 在早年仍然可能遇到对某些类型有问题的语言时,这很重要。是的,就像 vb.net,直到 2005 年。 jscript 直到 2008 年。仅此而已。泛型将是一种不稳定的语言,但 [CLSCompliant] 不会检查这一点。

标签: .net-standard cls-compliant


【解决方案1】:

没有 AssemblyInfo.cs 文件,但可以将程序集属性添加到 .NET Standard 项目中的任何文件。

因此,将其添加到项目中的 C# 文件将使程序集符合 CLS:

using System; [assembly: CLSCompliant(true)]

参考:NetStandard v1.0 docs

为了约定,我将创建一个 AssemblyInfo.cs 文件并将其放置在那里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    相关资源
    最近更新 更多