2016-12-20 4 views
-1

Я разрабатываю библиотеку UWP, которая имеет общедоступные свойства и параметры метода класса StreamSocket. Тем не менее, я получаю предупреждение «StreamSocket не CLS-совместимый». Что особенного в том, что Microsoft решила оставить соответствующую сборку не CLS-совместимой и есть ли какие-либо потенциальные проблемы, которые я должен знать о том, когда вы используете/распространяете эту библиотеку? Может быть, несоответствие CLS каким-то образом ограничит использование моей библиотеки другими разработчиками?Получение «Тип аргумента« StreamSocket »не совместим с CLS» warning on build

ответ

2

Ну, из документации:

Если вы проектируете 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? Об этом предупреждает компилятор.

+0

Uhm ... но как CLS-соответствие относится к UWP? Это не похоже на то, что система Common Type лежит в основе UWP. Это всего лишь один из многих прогнозов. – IInspectable

+0

@Inspectable Итак, в мире UWP совершенно нормально иметь CLS-несогласованный код в публичном API моей библиотеки (при условии, что MS делает то же самое и никто не заботится)? – Alex

+1

@Alex: Не знаю. Я просто не понимаю, почему требуется или желательна совместимость с системой несвязанного типа. Вы можете проецировать ** любой ** не-CLS-совместимый тип на любую .NET-проекцию, поэтому меня озадачивает. – IInspectable