2016-12-20 63 views
-1

上的警告我正在开发一个具有StreamSocket类的公共属性和方法参数的UWP库。但是,我得到“StreamSocket不符合CLS”的警告。那里有什么特别的地方,微软决定离开各自的程序集非CLS兼容,并且在使用/分发这个库时是否存在我应该知道的任何潜在问题?也许CLS incompliance会以某种方式限制我的库可以被其他开发者使用的方式?获取“参数类型'StreamSocket'不符合CLS”构建

回答

2

好了,从文档:

如果你设计一个符合CLS的类库,您的库将具有互操作性的保障具有广泛的编程语言;因此,您的库可能拥有比不符合CLS的版本更广泛的客户群。

所以[显而易见的]答案是他们在编码时没有考虑到“编程语言的互操作性”。

我并不感到惊讶,说实话,MS是不完全闻名严格

在这里阅读更多(IE人?):https://msdn.microsoft.com/en-us/library/bhc3fa7f.aspx

UPDATE:

我会尽量不再神秘这一点基于评论。

CLS(通用语言规范)定义了支持任何针对.NET Framework的语言的功能。因此,如果你的库将被.NET语言使用,你应该只关心它。

例如,CLS中有一个限制,即类和成员名称不能仅凭大小写不同。您不能有一个名为MySocket的属性,另一个名为mySocket。这对VB.NET等不区分大小写的语言很重要。

在这种情况下,您的库正在暴露未标记为符合CLS的StreamSocket。如果这个类有类似上述示例的方法,并且您尝试在某个VB.NET项目中使用您的库,该怎么办?这是编译器警告你的。

+0

呃...但CLS遵从性与UWP有什么关系?它不像普通型系统是UWP的核心。这只是众多预测中的一个。 – IInspectable

+0

@IInspectable所以在UWP世界里,在我的库的公共API中使用CLS不兼容的代码是非常正常的(假设MS做的和没有人关心)? – Alex

+1

@亚历克斯:我不知道。我只是不明白,为什么遵守一个不相关的类型系统是必需的或可取的。你可以将任何**非CLS兼容类型投影到任何.NET投影中,这让我感到困惑。 – IInspectable

相关问题