2009-10-28 2 views
9

При компиляции мое решение, я получаю несколько предупреждений о следующем:«Массивы в качестве аргументов атрибутов не является CLS-совместимым» предупреждение, но никакой информации о типах не дал

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

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

+1

Вы нашли простой способ найти, где было вызвано предупреждение? – jamiebarrow

ответ

6

CS3016.

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

+3

Но атрибут является внутренним для сборки - недоступен для общественности. Это не должно влиять на соответствие CLS. – thecoop

3

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

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

+4

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

0

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

\[*\(*\)\] 

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

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

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