【问题标题】:Class library reference problem类库引用问题
【发布时间】:2011-03-03 06:15:22
【问题描述】:

我正在构建一个类库并将其默认命名空间用作“系统”。假设我正在创建一个通用数据结构,比如 PriorityQueue 并将其放在 System.Collections.Generic 命名空间下。

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

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

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

请有人解释一下。

PS: 上次我问了类似的问题,但是说错了,所以人们误解了,我没有得到答案。这次我尽量把它正确地表达出来。很抱歉对于这个误会。

【问题讨论】:

  • 如果您尝试将您的类放在自定义命名空间下,它是否可以正常工作?
  • 是的,当然。正如我所说,我正在对这个想法进行一些实验。
  • 项目输出DLL的名称是什么?
  • 这与他的另一个问题完全相同。他不喜欢他得到的答案:stackoverflow.com/questions/3032884/…
  • @John 我已经在 PS 中提到过,我错误地提出了问题,这就是为什么我得到错误的答案..

标签: c# .net namespaces


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    当您使用“项目参考”而不是“程序集参考”时,问题似乎出现了。

    使用“程序集参考”。

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

    更新

    我猜当您使用项目引用(来自您的系统命名空间项目)时,会出现问题,因为构建不知道它应该从您引用的项目中解决依赖关系,而是尝试从一个程序集 已被引用,即 System.dll。它显然不存在于 System.dll 中。如果您添加对 dll 构建版本的直接引用,则构建将能够解析它。

    【讨论】:

    • 正如我对您的其他问题的评论,请思考如果每个人都试图做您正在做的事情会发生什么 - 混乱。 Microsoft 可以使用此技术,因为他们使用自己的 自己的 命名空间来执行此操作。 “系统”命名空间不是你的。请使用您自己的命名空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多