2008-12-01 47 views
3

下面是一個具體例子是不是根據VS.NET CLS-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 
    ... 

的這個接口定義似乎打破規則的所有功能都記錄here。那麼爲什麼VS顯示這些警告?

+0

哇,好所有的答案。我會嘗試所有這些建議。 – 2008-12-02 00:48:41

回答

1

使用.net反射器查看帶或不帶屬性的生成代碼,看看是否有任何區別。

如果有,並且它不明顯地解釋差異(即,如果唯一的區別是CLICompliant屬性),那麼用調查結果修改您的問題,然後我會再去...

2

我跑FXCop這似乎總是指出什麼才能使一個dll符合CLS