Каковы последствия кода, совместимого с NON-CLS, в .NET?

У меня есть пара предупреждений компилятора для приложения, которое я портировал с VB6 некоторое время назад относительно CLS-Compliance, включая:

Name '_AnIdentifier' is not CLS-Compliant.
Type of parameter 'myType' is not CLS-Compliant.

Несмотря на это, мое приложение, похоже, отлично работает с COM и управляемыми клиентами. Я видел несколько статей, описывающих, что делать, чтобы сделать код CLS-совместимым, и я, вероятно, продолжу и сделаю это в любом случае, чтобы избавиться от ворчащих предупреждений, но мне любопытно, какие недостатки несовместимого с CLS кода практичны сроки? Какие ограничения есть это навязывание, которое я еще не обнаружил?

2 ответа

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

Например, я не верю, что для распознавания идентификатора, начинающегося с подчеркивания, требуется язык. С# позволяет это, поэтому вы там безопасны, но для других языков "_AnIdentifier" может быть скрытым или иметь сгенерированное системой имя.


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

licensed under cc by-sa 3.0 with attribution.