Предупреждение «Массивы в качестве аргументов атрибута не соответствует CLS», но информация о типе не указана - PullRequest
9 голосов
/ 28 октября 2009

При компиляции моего решения я получаю несколько предупреждений о следующем:

warning CS3016: Arrays as attribute arguments is not CLS-compliant

Никакой другой информации о том, какой тип не соответствует, не приводится. В моих проектах у меня есть некоторые атрибуты, которые принимают аргументы массива params в своих конструкторах, но все они являются внутренними, и это не должно влиять на соответствие CLS. Почему дается это предупреждение и какого типа оно дается?

Ответы [ 3 ]

6 голосов
/ 28 октября 2009

CS3016 .

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

3 голосов
/ 09 декабря 2010

Я столкнулся с этим сегодня. У меня было 4 случая появления предупреждения. Затем я обнаружил, что у меня есть атрибут, украшающий 4 открытых метода в этой сборке. Когда я удалил их одну за другой, ошибки исчезли одна за другой.

Кроме того, если вы согласны с тем, что не соответствует CLS, вы можете поместить [CLSCompliant (false)] в методы, украшенные атрибутом (или в класс, для которого определены методы). Поместить его в конструктор / класс атрибута-нарушителя не поможет. Я предполагаю, что это имеет смысл, поскольку в конечном итоге атрибут, вероятно, предоставляется вне сборки как часть метаданных открытого метода.

0 голосов
/ 23 августа 2012

Я столкнулся с той же проблемой, и мне пришлось использовать диалоговое окно «Найти в файлах» в VS2010, выбрать «Использовать: Подстановочные знаки» и в текстовом поле «Найти что:» ввести

\[*\(*\)\]

Это создает список всех экземпляров атрибута. Пошел один за другим, и я смог идентифицировать и исправить предупреждения.

...