【问题标题】:Getting "Argument type 'StreamSocket' is not CLS-compliant" warning on build在构建时收到“参数类型‘StreamSocket’不符合 CLS”警告
【发布时间】:2016-12-20 16:41:32
【问题描述】:

我正在开发一个 UWP 库,它具有 StreamSocket 类的公共属性和方法参数。但是,我收到“StreamSocket 不符合 CLS”警告。有什么特别之处以至于微软决定让相应的程序集不符合 CLS,在使用/分发这个库时是否有任何潜在的问题我应该知道?也许 CLS 不合规会以某种方式限制其他开发人员使用我的库的方式?

【问题讨论】:

    标签: c# uwp cls-compliant


    【解决方案1】:

    好吧,从文档中:

    如果您设计一个符合 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 项目中使用您的库怎么办?这就是编译器警告您的内容。

    【讨论】:

    • 嗯...但是 CLS 合规性与 UWP 有何关系?这不像通用类型系统是 UWP 的核心。这只是众多预测之一。
    • @IInspectable 所以在 UWP 世界中,在我的库的公共 API 中包含不符合 CLS 的代码是完全正常的(假设 MS 也这样做并且没人关心)?
    • @Alex:我不知道。我只是不明白,为什么需要或需要遵守不相关的类型系统。您可以将 任何 不符合 CLS 的类型投影到任何 .NET 投影中,这让我感到困惑。
    • 好吧,我只需要确保在我的 UWP 库的公共方法(这是我的库的 .NET Framework 版本的一个端口)中使用 StreamSocket 时不会做任何愚蠢的事情。在 .NET 世界中,CLS 合规性很重要,但我找不到 UWP 是否如此。现在我得到了您的声明,即 CLS 合规性与 UWP 无关,我不应该再关心了。我相信这消除了我所有的担忧,谢谢。
    • 我不明白,这有什么帮助。该更新讨论了 .NET 框架。问题是关于 UWP 的问题。这些是不同的平台,通用语言规范不是后者的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    相关资源
    最近更新 更多