2010-06-13 97 views
2

我正在构建一个类库,并将其默认名称空间用作“System”。假设我正在创建一个通用数据结构,称为PriorityQueue并将其放置在System.Collections.Generic命名空间下。类库参考问题

现在,当我从另一个项目中引用该库时,我无法再在“System.Collections.Generic”命名空间下看到PriorityQueue。虽然在该项目中引用了该库,但我无法访问它中的任何类。

我的问题是mscorlib和System.dll共享类似的命名空间,但仍然可以访问这两个程序集的类,但为什么我的不能?如果我在我的类库中的System.Collections.Generic命名空间下放置一个公共类,并将该库引用到项目中,并使用类似“using System.Collections.Generic”的语句,那么为什么我无法在那里访问我的类?

这是我做过的一个实验,我知道在自定义类库中不鼓励使用System命名空间,但我想知道为什么在这种特殊情况下无法访问我的类的原因?

请有人对此有所了解。

PS:上次我问了类似的问题,但是说错了,所以人们被误解了,我没有得到我的答案。这一次,我试图尽可能正确地把它放在正确的位置。很抱歉对于这个误会。

+0

如果您尝试将类放在自定义命名空间下,它能正常工作吗? – brickner 2010-06-13 16:42:49

+0

yes of course。正如我所说我正在做这个想法的一些实验。 – 2010-06-13 16:43:54

+0

项目输出DLL的名称是什么? – Toby 2010-06-13 16:54:24

回答

1

当您使用“项目引用”而非“程序集引用”时,会出现此问题。

使用“组件参考”。

这是一个糟糕的主意,我不愿意深入研究其根本原因。

更新

我猜测,当您使用项目引用(从您的系统命名空间中的项目),产生的问题是作为构建不知道它应该解决您引用的项目的依赖性,但而是尝试从程序集中已经引用的System.dll中的一个中解析该程序。它显然不存在于System.dll中。如果你添加一个直接引用到你的dll的内置版本,这个版本将能够解决它。

+1

当我评论你的其他问题时,请反思一下如果每个人都试图去做你正在做的事 - 混沌会发生什么。微软可以使用这种技术,因为他们正在用他们自己的**命名空间来做这件事。 “系统”命名空间不是你的。请使用你自己的命名空间。 – 2010-06-13 17:20:07

0

我刚刚测试了一些代码,并且我可以在我自己的项目中扩展System命名空间,然后在同一个解决方案中调用来自其他项目的新类。我不知道你为什么不能做到这一点。