【问题标题】:Reference namespace from main project来自主项目的引用命名空间
【发布时间】:2013-12-11 14:01:05
【问题描述】:

我有一个引用“实用程序”项目的项目。 “实用程序”项目引用了第三个项目。都具有相同的命名空间,但我无法从主项目中执行“使用 OurNamespace.Utilities.3rdProject”。

我需要保留它,以便所有其他新项目只需引用“实用程序”项目并可以访问通过它引用的所有其他命名空间。我不能包含所有项目的所有参考。

/edit(它是级联的)

主项目(参考实用程序) -- 实用程序 -- Utilities 引用的具有相同命名空间的项目

在主项目中,我现在需要能够访问在 Utilities 引用中引用的项目中的命名空间,但无需将其专门添加到主项目中。

编辑 “项目 1”引用实用程序

using Utilities.Namespace1;

在 Utilities 中,另一个项目被 Namespace2 引用

我现在想从“项目 1”访问 Namespace2

using Utilities.Namespace2;

不必在“项目 1”中专门引用 BOTH,因为会有多个项目引用实用程序

【问题讨论】:

  • 您面临的具体问题是什么??
  • 我不确定您面临什么问题,您是说要引用具有子命名空间而不包含父命名空间的项目?
  • 我无法通过仅引用“实用程序”项目(其中包含第三个项目的引用)来从我的主项目中引用第三个项目的命名空间
  • 如果您需要同时访问 Utilities 项目和第三个项目,请确保它们共享相同的名称空间。您仍然需要添加对 dll 的引用。
  • 这就是问题的重点,我试图避免这种情况,以便我的“实用程序”处理所有引用,并且引用我的“实用程序”的任何其他项目都可以访问任何其他名称空间在它和/或其引用的项目中

标签: c# .net vb.net namespaces vb.net-2010


【解决方案1】:

如果你想直接在另一个装配中使用一个装配的组件,那么你需要一个参考。 “直接”是指以强类型的方式,例如:

  • 在另一个程序集中创建一个类型的实例。
  • 处理其他程序集中的类型实例。

相比之下,“间接”使用是指实用程序程序集在后台使用第三个项目的组件,但不发布这些,例如通过公共属性、公共方法的参数等。
为了进一步阐明程序集和命名空间:不引用命名空间,而是引用程序集。命名空间仅用于使类型名称唯一。从技术角度来看,命名空间和程序集名称彼此完全独立(尽管以程序集名称开始命名空间是一种很好的做法)。因此,在两个程序集中拥有相同的命名空间不会以任何方式改变这种情况;如果您想使用其他程序集的类型,您仍然需要参考。
为了解决您的问题,您可以添加对第三个项目的引用,或者如果您不能这样做,请执行以下操作之一:

  • 在实用程序程序集中为第三个项目中所需的功能添加包装器。由于您已经拥有对 Utilities 程序集的引用,因此您可以访问这些包装器 - 只要您不直接访问第三个项目的类型。
  • 创建另一个包含包装器的中间项目并引用它。

【讨论】:

  • 谢谢,第三个项目的包装器是什么样子的?在这种情况下,我使用 Dapper.NET 作为我的 Utilities 项目引用的第三个项目。我试过写一些你建议的效果,但是从我想访问的原始代码中丢弃功能的影响
  • 我将您的建议标记为答案。我创建了一个包装器,它只需要随着时间的推移而扩展,而不是按原样删除功能
猜你喜欢
  • 1970-01-01
  • 2014-05-03
  • 2016-10-08
  • 2014-12-10
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多