问题标签 [cls-compliant]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 参考名称案例不符合 CLS
我有一个 .NET 3.5 C# 项目,其命名空间为SampleNamespace.Tools.Sample
.
如果我将一个名为“Samplenamespace.Utils.Example”的程序集添加到我的项目中,我会收到以下警告:
标识符“Samplenamespace”仅在不符合 CLS 的情况下有所不同
注意 中的小写“n” Samplenamespace
。
目前我什至没有在我的项目中使用参考程序集。只需将其添加为参考就会导致警告。
考虑到我什至没有在我的公共类中公开对程序集的任何引用,为什么编译器会抱怨这个?
任何解决方法?
c# - C#:基于非零的数组不符合 CLS
我目前正在阅读Albahari的 C# 3.0 in a Nutshell和 pg。241,在谈到数组索引时,他说:
基于非零的数组不符合 CLS(通用语言规范)
非零数组不符合CLS究竟是什么意思?它对您的代码有什么影响?
[更新]
这是本书页面的链接。
c# - CLSCompliant 属性是否关心旧版本的 .NET 语言?
例如,我读到 Visual Basic .net 之前没有运算符重载,因此如果它们也没有作为普通方法提供(添加,而不是运算符+),则无法使用类型重载运算符。
既然 VB 具有此功能,CLSCompliant 属性是否会关心您是否有普通的静态方法,如 Add、Subtract 而不是仅运算符重载?
我编写了一些没有口头静态方法的类型,但只有运算符重载,C# 编译器不在乎。如果有问题,它会警告我,对吗?
c# - 如何在 Web 参考中处理符合 CLS 的问题?
我在我的 C# 解决方案的程序集中打开 [assembly: System.CLSCompliant(true)]。
我现在在为 SharePoint Web 服务生成的代码中收到了一些警告。
这是不符合 CLS 的方法之一:
如何删除此警告?
谢谢你,基思
c# - 为什么这个带下划线的名称不符合 CLS 标准?
为什么我会收到编译器警告
标识符“Logic.DomainObjectBase._isNew”不符合 CLS
对于以下代码?
vb.net - LINQ to SQL 类不符合 CLS?
我正在使用 LINQ to SQL 作为新项目的数据访问层。我已将我的数据库表添加到设计器中,一切都很好。
每当我在函数中使用这些类之一时,Visual Studio 都会警告我“类型 xxxx 不符合 CLS”或“函数 xxxx 的返回类型不符合 CLS”
这是 LINQ to SQL 生成的类的问题吗?有关系吗?我可以在任何地方禁用这些警告吗?我的 VS 错误列表被这些警告堵塞了,很难看到其他任何东西。
编辑:
抱歉,我应该提到这些是 VB.NET 项目。:)
.net - CLSCompliant(true) 拖入未使用的引用
谁能解释以下行为?
总之,如果您在 Visual Studio 2008 中创建多个符合 CLS的库并让它们共享一个公共命名空间根,则引用另一个库的库将需要对该库的引用的引用,即使它不使用它们。
这很难用一句话来解释,但这里有一些重现行为的步骤(密切注意命名空间):
创建一个名为 LibraryA 的库并向该库添加一个类:
[assembly: CLSCompliant(true)]
通过添加到 AssemblyInfo.cs确保库符合 CLS 。
创建另一个名为 LibraryB 的库并引用 LibraryA。将以下类添加到 LibraryB:
和
确保 LibraryB 也符合 CLS。
请注意,Class1InLibraryB 派生自 LibraryA 中的类型,而 Class2InLibraryB 不是。
现在创建名为 LibraryC 的第三个库并引用 LibraryB(但不是 LibraryA)。添加以下类:
这仍然应该编译。请注意, Class1InLibraryC 派生自 LibraryB 中的类,该类不使用 LibraryA 中的任何类型。
另请注意,Class1InLibraryC 是在一个命名空间中定义的,该命名空间是 LibraryB 中定义的命名空间层次结构的一部分。
到目前为止,LibraryC 没有对 LibraryA 的引用,并且由于它不使用 LibraryA 中的任何类型,因此解决方案可以编译。
现在也使 LibraryC CLS 兼容。突然,解决方案不再编译,给你这个错误信息:
'Ploeh.Class1InLibraryA' 类型在未引用的程序集中定义。您必须添加对程序集“Ploeh,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”的引用。
您可以通过以下方式之一再次编译解决方案:
- 从 LibraryC 中删除 CLS 合规性
- 添加对 LibraryA 的引用(尽管您不需要它)
- 更改 LibraryC 中的命名空间,使其不属于 LibraryB 的命名空间层次结构(例如更改为 Fnaah.Samples.LibraryC)
- 更改 Class1InLibraryB 的命名空间(即 LibracyC 中未使用的命名空间),使其不在 LibraryC 的命名空间层次结构中(例如更改为 Ploeh.Samples.LibraryB)
名称空间层次结构和 CLS 合规性之间似乎存在一些奇怪的相互作用。
可以通过选择上面列表中的一个选项来解决这个问题,但是任何人都可以解释这种行为背后的原因吗?
.net - .NET 中 API 重大更改的权威指南
我想尽可能多地收集有关 .NET/CLR 中 API 版本控制的信息,特别是 API 更改如何破坏或不破坏客户端应用程序。首先,让我们定义一些术语:
API 更改- 公开可见的类型定义的更改,包括其任何公共成员。这包括更改类型和成员名称、更改类型的基类型、从类型的已实现接口列表中添加/删除接口、添加/删除成员(包括重载)、更改成员可见性、重命名方法和类型参数、添加默认值对于方法参数,添加/删除类型和成员的属性,以及添加/删除类型和成员的泛型类型参数(我错过了什么吗?)。这不包括成员机构的任何变化,或私人成员的任何变化(即我们不考虑反射)。
二进制级中断- API 更改导致针对旧版本 API 编译的客户端程序集可能不会与新版本一起加载。示例:更改方法签名,即使它允许以与以前相同的方式调用(即:void 返回类型/参数默认值重载)。
源代码级中断- 一种 API 更改,导致编写的现有代码针对旧版本的 API 进行编译可能无法与新版本一起编译。然而,已经编译的客户端程序集像以前一样工作。示例:添加一个新的重载可能会导致之前明确的方法调用出现歧义。
源代码级别的安静语义更改- 一种 API 更改,导致编写用于针对旧版本 API 进行编译的现有代码悄悄地更改其语义,例如通过调用不同的方法。然而,代码应该继续编译而没有警告/错误,并且以前编译的程序集应该像以前一样工作。示例:在现有类上实现一个新接口,导致在重载决议期间选择不同的重载。
最终目标是对尽可能多的中断和安静语义 API 更改进行分类,并描述中断的确切影响,以及哪些语言受其影响和不受其影响。扩展后者:虽然某些更改普遍影响所有语言(例如,向接口添加新成员将破坏该接口在任何语言中的实现),但有些更改需要非常特定的语言语义才能发挥作用才能获得突破。这通常涉及方法重载,并且通常涉及与隐式类型转换有关的任何事情。即使对于符合 CLS 的语言(即至少符合 CLI 规范中定义的“CLS 消费者”规则的语言),似乎也没有任何方法可以在这里定义“最小公分母”——尽管我 如果有人在这里纠正我的错误,我将不胜感激 - 所以这将不得不按语言进行。最感兴趣的自然是 .NET 开箱即用的那些:C#、VB 和 F#;但其他的,如 IronPython、IronRuby、Delphi Prism 等也是相关的。越是极端情况,它就越有趣——移除成员之类的事情是不言而喻的,但是方法重载、可选/默认参数、lambda 类型推断和转换运算符之间的微妙交互可能会非常令人惊讶有时。
几个例子来启动这个:
添加新的方法重载
种类:源级中断
受影响的语言:C#、VB、F#
变更前的 API:
变更后的API:
示例客户端代码在更改之前工作并在更改之后中断:
添加新的隐式转换运算符重载
种类:源级中断。
受影响的语言:C#、VB
不受影响的语言:F#
变更前的 API:
变更后的API:
示例客户端代码在更改之前工作并在更改之后中断:
注意:F# 没有损坏,因为它没有任何语言级别的对重载运算符的支持,无论是显式的还是隐式的 - 都必须直接调用op_Explicit
和op_Implicit
方法。
添加新的实例方法
Kind:源级安静的语义变化。
受影响的语言:C#、VB
不受影响的语言:F#
变更前的 API:
变更后的API:
遭受安静语义更改的示例客户端代码:
注意:F# 没有损坏,因为它没有语言级别的支持ExtensionMethodAttribute
,并且需要将 CLS 扩展方法作为静态方法调用。
.net - “数组作为属性参数不符合 CLS”警告,但没有给出类型信息
在编译我的解决方案时,我收到以下几个警告:
没有给出关于什么类型不合规的其他信息。在我的项目中,我有一些属性在其构造函数中采用 params 数组参数,但它们都是内部的,不应影响 CLS 合规性。为什么会给出这个警告,它是在什么类型上给出的?
.net - 标记项目中的所有类符合 CLS
如果我有一个项目并将其标记为
我需要在项目中的每个CLSCompliant(True)
类之前放置,还是它们都默认为 CLSCompliant?