2010-05-26 2 views
5

Можно создать дубликат:
‘Arrays as attribute arguments is not CLS-compliant’ warning, but no type information givenОчистка C предупреждение # компилятора CS3016: Массивы как аргументы атрибутов не является CLS-совместимого

У меня есть некоторый код, который создает это предупреждение в нескольких местах. Я хочу их исправить, но я не знаю, где они, потому что компилятор C# не сообщает строку ошибки (для этого есть открытая проблема с MS Connect).

Есть ли инструмент, который может сказать мне, где проблематичный код? Инструмент уровня IL - это хорошо, известно, что имя метода и тип объявления достаточно хороши.

+0

Как-то я пропустил этот ... – mark

+0

Я действительно не понимаю, как другой вопрос поможет вам. – user7116

ответ

3

Вы объявили класс как:

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

или объявили атрибут как:

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

И все это происходит потому, что ваша сборка помечается быть CLSCompliant:

[assembly:CLSCompliant(true)]

+0

Я знаю, почему это происходит. Я тот, кто отметил сборку как CLSCompliant (правда) в первую очередь. Я хочу исправить все места, не совместимые с CLS, но с трудом найти их вручную. – mark

1

Я бы принял следующий процесс:

  • Определить атрибуты, которые имеют массивы в своих конструкторах (изощренность, необходимых для этого, очевидно, зависит от того, сколько классов вы имеете, которые вытекают из атрибутов)
  • Используйте Visual Studio «Найти все ссылки» вариант на атрибуте класса, чтобы найти вещи, которые украшены атрибутом с использованием массивов.

Первая часть должна быть довольно простой, если соответствующие атрибуты определены в вашем решении.

Если атрибуты из зависимостей, вам может потребоваться поиск в регулярном выражении, чтобы найти места, где такие атрибуты используются.

 Смежные вопросы

  • Нет связанных вопросов^_^