2009-06-02 89 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)] 

不知道我认为这是一个好主意,但...

更新:我认为,虽然没有公开暴露警告的原因是名称空间没有访问修饰符。你也许可以说名字空间总是公开的,所以他们暴露给潜在的客户,尽管它们可能不包含任何公共类型。

相关问题