我有以下情况:
具有命名空间
Library
的已编译库,其中包含类 Feauture
。
现在还有另一个库正在开发中,它打算利用该功能,被称为
Library.Feature
。最后还有第三个库:Library.Feature.UI
。
在
Library.Feature.UI
项目中工作时,该项目引用了其他两个库,VS 经常大喊大叫尝试使用 Feature
类,因为它主要将其视为命名空间。
我尝试了一些不同的 using 指令来解决这个问题,并尝试限定类名,但没有任何效果。
假设我无法更改任何命名空间或现有类名,有没有办法避免这个问题?
您可以使用完全限定名称,在其中指定命名空间和类型名称,也可以使用 using 指令 创建别名:
using MyFeature = Library.Feature;
您可以使用别名指令为任何名称空间指定不同的名称,然后使用该别名来引用该名称空间。
通过这样做,您可以区分类和命名空间。
使用命名空间时,在顶部写入以下内容。
using FeatureClass = Library.Feature;
更多这方面的知识,您可以参考: https://msdn.microsoft.com/en-us/library/aa664765%28v=vs.71%29.aspx
如果您还有任何其他问题,请告诉我...
理论上,您应该能够在不更改名称空间的情况下解决这个问题,但我还没有找到任何可行的解决方案。这是一个 Visual Studio IntelliSense 问题,原因在于它解决依赖关系的方式。
发生这种情况的原因如下: 编译器和 IntelliSense 优先考虑本地命名空间(您工作的命名空间)而不是全局命名空间(本地命名空间之外的任何内容)。因此,如果命名重叠,IntelliSense 将查看错误的类。理论上,您应该能够使用:完整限定名称、“global::”关键字或命名空间别名,但我还没有发现这些方法中的任何一种都可以使 IntelliSense 满意。
因此我采用更改命名空间来避免这些冲突。
这应该可以解决问题(参考文献)
using FeatureClass = Library.Feature;