2009-06-02 28 views
5

我有了的SampleNamespace.Tools.Sample一個命名空間的.NET 3.5 C#項目。參考名稱的情況是不符合CLS

如果我添加一個名爲「Samplenamespace.Utils.Example」組裝到項目中,我得到以下警告:

標識符「Samplenamespace」只有在不同的情況下是不符合CLS

請注意Samplenamespace中的小寫'n'。

我甚至沒有用我的那一刻項目的引用程序集。簡單地將其作爲參考添加會導致警告。

爲什麼編譯器抱怨這個考慮,我都不暴露在我的公開課給大會的任何引用?

什麼解決辦法?

回答

7

並非所有的.NET語言是大小寫敏感的(VB爲例)當你混的命名空間就是這樣,只有版本比較的情況下(用警告的措辭),你的代碼可能無法accessable給其他開發者。

這可能不是你的情況,這就是爲什麼它是一個警告(這在我的店裏,我們當作一個錯誤)

+0

謝謝拉爾夫,我仍然不明白爲什麼這應該沒關係,因爲我的項目沒有任何暴露形成引用裝配到任何潛在的客戶VB。我有效地從底層程序集中抽象出VB客戶端? – user115909 2009-06-02 11:13:19

+0

由於VB不區分大小寫,因此無法區分SampleNamespace.A和Samplenamespace.A,因此無法確定要調用哪種類型。爲了防止這種歧義,C#編譯器將其標記出來,以便您只能創建可以由每個人調用的類型和成員,而不會有任何歧義。 – Gishu 2009-06-02 11:19:28

2

它只是警告你,因爲並不是所有的語言,可以你的解決方案中的消費類型將注意不同(並且可能無法使用這些類型)。

我認爲,你可以通過標記程序集作爲非符合CLS(AssemblyInfo.cs文件中)(read more here)避免這樣的警告:

[assembly:CLSCompliant(false)] 

不知道我認爲這是一個好主意,但...

更新:我認爲,雖然沒有公開暴露警告的原因是名稱空間沒有訪問修飾符。你也許可以說名字空間總是公開的,所以他們暴露給潛在的客戶,儘管它們可能不包含任何公共類型。