【发布时间】:2016-12-20 16:41:32
【问题描述】:
我正在开发一个 UWP 库,它具有 StreamSocket 类的公共属性和方法参数。但是,我收到“StreamSocket 不符合 CLS”警告。有什么特别之处以至于微软决定让相应的程序集不符合 CLS,在使用/分发这个库时是否有任何潜在的问题我应该知道?也许 CLS 不合规会以某种方式限制其他开发人员使用我的库的方式?
【问题讨论】:
标签: c# uwp cls-compliant
我正在开发一个 UWP 库,它具有 StreamSocket 类的公共属性和方法参数。但是,我收到“StreamSocket 不符合 CLS”警告。有什么特别之处以至于微软决定让相应的程序集不符合 CLS,在使用/分发这个库时是否有任何潜在的问题我应该知道?也许 CLS 不合规会以某种方式限制其他开发人员使用我的库的方式?
【问题讨论】:
标签: c# uwp cls-compliant
好吧,从文档中:
如果您设计一个符合 CLS 的类库,您的库将保证与多种编程语言的互操作性;因此,与不符合 CLS 的版本相比,您的库可能拥有更广泛的客户群。
所以[显而易见] 的答案是,他们在编写代码时并没有考虑到“编程语言互操作性”。
说实话,我并不感到惊讶,MS 并不以严谨着称(IE 有人吗?)
在此处阅读更多信息:https://msdn.microsoft.com/en-us/library/bhc3fa7f.aspx
更新:
我将尝试根据 cmets 稍微揭开它的神秘面纱。
CLS(通用语言规范)定义了任何以 .NET Framework 为目标的语言必须支持的功能。因此,只有当您的库将被 .NET 语言使用时,您才应该关心它。
例如,CLS 中有一个限制,即类名和成员名不能仅按大小写不同。您不能有一个名为 MySocket 的属性和另一个名为 mySocket 的属性。这对于不区分大小写的 VB .NET 等语言很重要。
在目前的情况下,您的库正在公开未标记为符合 CLS 的 StreamSocket。如果这个类有类似上面示例的方法,并且您尝试在某个 VB.NET 项目中使用您的库怎么办?这就是编译器警告您的内容。
【讨论】: