清理C#编译器警告CS3016:作为属性参数的数组不符合CLS

时间:2010-05-26 12:25:03

标签: c# .net cls-compliant

  

可能重复:
  ‘Arrays as attribute arguments is not CLS-compliant’ warning, but no type information given

我有一些代码,可以在几个地方生成此警告。我想修复它们,但我不知道它们在哪里,因为C#编译器没有报告错误行(有一个开放的MS Connect问题)。

是否有工具可以告诉我有问题的代码在哪里? IL级工具很好,已知方法名称和声明类型足够好。

2 个答案:

答案 0 :(得分:3)

你已经宣布了一个类:

[SomeAttribute(new string[] { "foo", "bar" })
class SomeClass { }

或声明了如下属性:

class SomeAttribute : Attribute
{
    public SomeAttribute(string[] arr) { } // or another array
}

所有这一切都发生了,因为你的程序集被标记为CLSCompliant:

[assembly:CLSCompliant(true)]

答案 1 :(得分:1)

我采用以下流程:

  • 确定在其构造函数中具有数组的属性(执行此操作所需的复杂程度显然取决于从Attribute派生的类的数量)
  • 使用属性类构造函数上的Visual Studio“查找所有引用”选项,使用数组查找使用该属性修饰的内容。

如果在您的解决方案中定义了相关属性,则第一部分应该相当容易。

如果属性来自依赖项,那么您可能必须使用正则表达式搜索来查找使用此类属性的位置。