Когда допустимо нарушить соответствие CLS?

StackOverflow https://stackoverflow.com/questions/540520

  •  22-08-2019
  •  | 
  •  

Вопрос

Мне было интересно, какие существуют крайние случаи, которые могут сделать Соответствие спецификациям общего языка приемлемый.Даже если я не собираюсь использовать другие языки, я думаю, что принципы, утверждаемые CLSCompliantAttribute являются хорошими передовыми практиками.

Сталкивались ли вы/знаете ли вы случаи, когда ЯГНИ перевешивает лучшие практики?

Это было полезно?

Решение

«[sic] Какая польза от соответствия CLS?»

Среднее доверие, НажмитеOnce, запуск с общего сетевого диска, гостевые профили в настройках домена и т. д.Существует множество ситуаций безопасности, когда ваш код не может работать, если вы нарушите соответствие CLS.

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

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

Я бы сказал, что если вы создаете сборку или компонент API, вы всегда должны их придерживаться.Слишком многие сторонние компоненты выбирают простой путь и просто помечают их как сломанные при попытке запуска со средним уровнем доверия.В некоторых случаях это единственная причина, по которой они не могут бежать.Если бы им потребовалось немного больше времени, чтобы следовать рекомендациям, пользователи не были бы ограничены в том, как они могут использовать свой компонент.

Другие советы

Что ж, массивы «params» по атрибутам иногда очень заманчивы (но не соответствуют требованиям).Но я бы рекомендовал по возможности использовать подходы, совместимые с CLS.

Я думаю, что это приемлемо для внутренней библиотеки продукта при работе с устаревшими слоями, которые требуют таких функций или по соображениям производительности.

Но эти несовместимые интерфейсы затем должны быть повторно инкапсулированы на более высоком уровне.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top