CLSCompliant 提示不适用于 C# 代码

问题描述

我的目标框架是 .NET 5,应用程序类型是控制台。我使用 Visual Studio 2019 版本 16.10.1 作为 IDE。我想看看如果我在 C# 代码中使用 CLSCompliant 提示并故意违反 CLS 合规性,我是否确实收到警告。违反是通过引用类型为 UInt32 的变量来实现的,因为未在 CLS 中指定。但似乎我没有收到任何错误或警告。

代码如下:-

using System;

[assembly: CLSCompliant(true)]
namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            UInt32 x = 12;
            Console.WriteLine(Convert.ToString(x));
        }
    }
}

我是否必须为此更改一些 IDE 设置才能显示与 CLS 相关的警告?

解决方法

CLS-complience 是您图书馆的合同,这意味着它可以在任何语言中使用。例如,某些语言不支持无符号整数或不区分大小写

这意味着您可以按照自己喜欢的方式编写内部 API 或实现,但必须遵循公共 API 的规则

[CLSCompliant(true)]
public class MyClass
{
    public void Yes(int value) {}
    public void No(uint value) {} // warning: uint is not compliant
    public void no(int value) {} // warning: No & no is same word
    public void Yes2(int value)
    {
        Span<byte> bytes = stackalloc byte[10]; // we can do weird things inside,but as long public API is compliant,it won't cause warnings
        Helper.ProcessBytes(bytes);
    }
}

您可以在docs

中阅读更多内容