2010-05-26 14 views
5

Powiel możliwe:
‘Arrays as attribute arguments is not CLS-compliant’ warning, but no type information givenCzyszczenie C CS3016 ostrzegawczy # kompilator: Tablice jako argumenty atrybut nie jest CLS zgodnych

Mam niektóre kodu, który generuje to ostrzeżenie w kilku miejscach. Chcę je naprawić, ale nie wiem, gdzie one są, ponieważ kompilator C# nie zgłasza linii błędu (istnieje otwarty problem MS Connect dla tego).

Czy istnieje narzędzie, które może mi powiedzieć, gdzie jest problematyczny kod? Narzędzie poziomu IL jest w porządku, wiadomo, że nazwa metody i typ deklaracji są wystarczająco dobre.

+0

Jakoś tęskniłem za tym ... – mark

+0

Naprawdę nie rozumiem, jak inne pytanie może ci pomóc. – user7116

Odpowiedz

3

Ty zadeklarowały klasę takich jak:

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

lub zadeklarowały atrybut stylu:

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

A wszystko to dzieje się dlatego, że zespół jest oznaczone jako CLSCompliant:

[assembly:CLSCompliant(true)]

+0

Wiem, dlaczego tak się dzieje. Jestem tym, który w pierwszej kolejności oznaczył zespół jako CLSC (prawdziwy). Chcę naprawić wszystkie niezgodne z CLS miejsca, ale trudno jest je wszystkie znaleźć ręcznie. – mark

1

Przyjąłbym następujący proces:

  • Zidentyfikuj atrybuty, które mają tablice w ich konstruktorów (wyrafinowania wymaganych w tym celu oczywiście zależy od tego, ile klas trzeba, że ​​wywodzą się z Attribute)
  • użyć Visual Studio „Znajdź wszystkie odniesienia” Opcja na atrybucie klasy konstruktorów, aby znaleźć rzeczy, które są ozdobione atrybutem za pomocą tablic.

Pierwsza część powinna być dość łatwa, jeśli omawiane atrybuty są zdefiniowane w rozwiązaniu.

Jeśli atrybuty pochodzą z zależności, konieczne może być skorzystanie z wyszukiwania regex w celu znalezienia miejsc, w których takie atrybuty są używane.