3

这是根据 VS.NET 2005 不符合 CLS 投诉的具体示例。

Public Interface IDbId

    Function GetNativeObject() As Object
    Function Equals(ByVal compObj As IDbId) As Boolean
    Function CompareTo(ByVal compObj As IDbId) As Integer
    Function ToString() As String

End Interface

这是我用 DbId32、DbId64、DbIdString 等类实现的接口。它是一种将本机数据库主键类型抽象为一个常见的 .Net 类型的方法。

我没有显示的是工厂方法,它实例化正确的具体类型(例如,SQL Server 类型“int”的新 DbId32)给定本机数据库类型。

现在假设我像这样使用这个界面:

Public MustOverride ReadOnly Property ID() As IDbId

VS 现在输出此警告消息:

函数“ID”的返回类型不是 CLS 投诉的。

我可以通过将此属性添加到我的界面来停止这些警告,如下所示:

<CLSCompliant(True)> _
  Public Interface IDbId
  ...

此接口定义的所有功能似乎都没有违反此处记录的规则。那么为什么 VS 会显示这些警告呢?

4

3 回答 3

3

我认为这是由于您的示例中的 MustOverride 关键字修饰符。检查一下: 在符合 CLS 的类中不允许不符合 CLS 的“MustOverride”成员

于 2008-12-01T22:58:03.547 回答
2

我运行FXCop,这似乎总是指出使 dll CLS-Compliant 需要什么

于 2008-12-02T00:02:28.910 回答
1

使用 .net reflector 看看生成的有无属性的代码,看看有没有区别。

如果有,并且它没有明显解释差异(即,如果唯一的区别是 CLICompliant 属性),那么用调查结果修改你的问题,我会再试一次...... :)

于 2008-12-01T22:56:32.333 回答