Я разрабатываю библиотеку UWP, которая имеет общедоступные свойства и параметры метода класса StreamSocket. Тем не менее, я получаю предупреждение «StreamSocket не CLS-совместимый». Что особенного в том, что Microsoft решила оставить соответствующую сборку не CLS-совместимой и есть ли какие-либо потенциальные проблемы, которые я должен знать о том, когда вы используете/распространяете эту библиотеку? Может быть, несоответствие CLS каким-то образом ограничит использование моей библиотеки другими разработчиками?Получение «Тип аргумента« StreamSocket »не совместим с CLS» warning on build
ответ
Ну, из документации:
Если вы проектируете CLS-совместимые библиотеки классов, ваша библиотека будет иметь гарантию совместимости с широким спектром языков программирования; поэтому ваша библиотека, скорее всего, будет иметь более широкую клиентскую базу, чем версия, не совместимая с CLS.
Таким образом, [очевидный] ответ заключается в том, что у них не было «совместимости с языком программирования», когда они кодировали эту вещь.
Я не удивлен, честно говоря, МС точно не известен строгостью
Подробнее здесь (IE кого?): https://msdn.microsoft.com/en-us/library/bhc3fa7f.aspx
UPDATE:
Постараюсь демистифицировать это немного основано на комментариях.
CLS (Common Language Specification) определяет функции, которые поддерживает любой язык, предназначенный для .NET Framework . ДОЛЖЕН. Следовательно, вы должны заботиться только об этом, если ваши библиотеки будут потребляться языком .NET.
Например, в CLS есть ограничение, в котором говорится, что имена классов и членов не могут отличаться только в зависимости от случая. У вас не может быть одного свойства с именем MySocket и другого с именем mySocket. Это важно для таких языков, как VB .NET, которые не чувствительны к регистру.
В этом случае ваша библиотека подвергает StreamSocket, которая не отмечена как CLS Compliant. Что делать, если у этого класса есть методы, подобные вышеприведенным, и вы пытаетесь использовать свою библиотеку в каком-то проекте VB.NET? Об этом предупреждает компилятор.
Uhm ... но как CLS-соответствие относится к UWP? Это не похоже на то, что система Common Type лежит в основе UWP. Это всего лишь один из многих прогнозов. – IInspectable
@Inspectable Итак, в мире UWP совершенно нормально иметь CLS-несогласованный код в публичном API моей библиотеки (при условии, что MS делает то же самое и никто не заботится)? – Alex
@Alex: Не знаю. Я просто не понимаю, почему требуется или желательна совместимость с системой несвязанного типа. Вы можете проецировать ** любой ** не-CLS-совместимый тип на любую .NET-проекцию, поэтому меня озадачивает. – IInspectable