Есть ли причина не отмечать DLL как CLSC-совместимую?

В настоящее время я тестирую Ndepend, и он выдает предупреждение о том, что сборки должны быть помечены как CLSCompliant.

Наш проект полностью написан на C #, поэтому в нем нет необходимости.

Что меня интересует: есть ли какие-либо негативные последствия маркировки dll как clscom-совместимой, или мне просто нужно отключить предупреждение?

Примечание. Я не спрашиваю, что означает CLSCompliant, о котором идет речь: Что такое атрибут «CLSCompliant» в .NET?


person Shiraz Bhaiji    schedule 08.08.2011    source источник
comment
Фактическая маркировка ваших сборок - это предложение Билла Вагнера по улучшению кода в эффективном C # - если вам нужны аргументы для вашего босса. см .: amazon.com/Effective-Specific-Ways-Improve- Ваш / dp /   -  person yas4891    schedule 08.08.2011
comment
FxCop также рекомендует отмечать сборки как CLS-совместимые. Тем не менее, имейте в виду, что вы можете пометить сборки как CLS-совместимые в целом, а затем исключить отдельные типы или члены в этих сборках с атрибутом [CLSCompliant(false)]. Это может быть необходимо, если вы также хотите вернуть или принять некоторые типы из сторонних библиотек, которые сами по себе несовместимы с CLS.   -  person O. R. Mapper    schedule 10.02.2013


Ответы (3)


Это один из тех тонких случаев ... Соответствие CLS, вероятно, наиболее важно для авторов библиотек, которые не могут контролировать, кто звонит. В вашем случае вы утверждаете, что «наш проект полностью написан на C #», и в этом случае вы правы: в этом нет необходимости. Он добавляет ограничения (например, для неподписанных типов), которые могут (или не могут) самым очевидным образом повлиять на представление ваших данных.

Итак: если это не добавляет вам никакой ценности вообще, тогда откровенно: отключите это правило. Если вы можете добавить его бесплатно (без изменений кода, кроме атрибутов), тогда, возможно, все в порядке, но все в балансе - усилия и результат. Если здесь нет никакой выгоды, не тратьте время.

Если вы автор библиотеки (продавец или OSS), то вам следует подписаться на нее.

person Marc Gravell    schedule 08.08.2011

Есть несколько функций C #, несовместимых с CLS, например беззнаковые типы. Поскольку в нескольких языках регистр не учитывается, не должно быть типов и членов, которые различаются только регистром, например MyObject и myObject, а также несколько других функций. Таким образом, если вы не планируете работать с другими языками .NET, нет причин отмечать ваш код как CLSCompliant.

person Eugene    schedule 08.08.2011

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

person Community    schedule 08.08.2011