Каковы последствия не-CLS-совместимого кода в .NET?
-
22-07-2019 - |
Вопрос
У меня есть пара раздражающих предупреждений компилятора для приложения, которое я перенес с VB6 некоторое время назад относительно CLS-совместимости, включая:
Name '_AnIdentifier' is not CLS-Compliant.
Type of parameter 'myType' is not CLS-Compliant.
Несмотря на это, мое приложение работает нормально с COM и управляемых клиентов. Я видел несколько статей, описывающих, что нужно сделать, чтобы сделать код CLS-совместимым, и я, вероятно, сделаю это в любом случае, чтобы избавиться от надоедливых предупреждений, но мне любопытно, какие недостатки кода, не совместимого с CLS, на практике термины? Какие ограничения это наложение, которое я еще не обнаружил?
Решение
По сути, ваш класс может быть недоступен (или может показаться странным, например, большие положительные числа рассматриваются как отрицательные) при использовании некоторых языков .NET Я не могу сказать, на каких языках они могут быть.
Например, я не верю, что язык необходим для распознавания идентификатора, который начинается с подчеркивания. C # позволяет это, так что вы в безопасности, но для других языков " _AnIdentifier " может быть скрыт или иметь имя, сгенерированное системой.
Другие советы
Я столкнулся с проблемами с инструментами запутывания, генерирующими неправильный запутанный код, когда код, не совместимый с CLS, запутывается. Р>