这有点怪异。
我认为某处必须有一个设置可以解释为什么会发生这种情况。
在我们的解决方案中,大约有50个不同的项目。在大多数情况下,库以命名空间OurCompany开始。
我们有OurComany.This.That和OurCompany.Foo.Bar ......等。
外部库与命名空间
之间存在命名空间/类冲突OurCompany.Foo.Bar
这样一个合格的班级。
OurCompany.Some.Location.Foo
错误如下:
Error 75 The type or namespace name 'MethodName' does not exist in the
namespace 'OurCompany.Foo' (are you missing an assembly reference?)
甚至Resharper也给了我一个"资格赛是多余的"当我完全符合" OurCompany"名称空间..即
OurCompany.Some.Location.Foo.MethodName();
//OurCompany is redundant
我无法弄清楚到底是做什么的。解决方案非常庞大,因此试图对问题进行逆向工程并不是很好的解决方案。
我应该声明如果我使用......
Some.Location.Foo.MethodName(); //Leaving out OurCompany
...... Resharper消息消失了。
答案 0 :(得分:2)
我以为我理解这里发生了什么,但现在我看到一些奇怪的行为让我质疑我对C#命名空间范围行为的理解。
显然,基本问题是范围界定。据推测,你正在OurCompany
下的某个命名空间中处理某些事情;我们只是为了争论而说,你在OurCompany.This.That
。自动地,直接在OurCompany.This.That
,OurCompany.This
和OurCompany
命名空间中找到的任何类型或命名空间都在范围内,不需要使用。这就是为什么一旦OurCompany.Foo
命名空间的程序集被涉及就会崩溃的原因(默认情况下OurCompany
中的所有内容都在范围内,包括Foo
命名空间,并且名称空间[显然]优先以及为什么你得到冗余命名空间警告(Some
命名空间在OurCompany
命名空间中定义,因此它自动在范围内)。
但是试图重现这种行为,我遇到了一些奇怪的事情。我创建了一个文件来保存相关世界的其余部分:
namespace OurCompany
{
namespace Some
{
namespace Location
{
public class Foo
{
public static void MethodName() { }
}
}
}
namespace Foo
{
namespace Bar { }
}
}
发现以下(我收集的内容与您正在做的相似)不起作用:
using OurCompany.Some.Location;
namespace OurCompany
{
namespace This
{
namespace That
{
class BeepBoop
{
private void DoSomething()
{
Foo.MethodName(); // No good; Foo is a namespace here.
}
}
}
}
}
...但这样做了:
namespace OurCompany
{
namespace This
{
namespace That
{
using OurCompany.Some.Location;
class BeepBoop
{
private void DoSomething()
{
Foo.MethodName(); // Puh-wha? This works?
}
}
}
}
}
我坦率地承认我不知道这里发生了什么。但显然范围界定并不像“范围内的任何内容,名称空间优先。”
答案 1 :(得分:1)
每当我引用的dll没有构建时,我都会看到这个错误。可能没有构建引用并且存在一些构建错误。因此,Resharper和VS都在抱怨缺少的类型。
为了解决这个问题,我建议您执行以下操作:
我知道这很乏味,但我可以看到这是解决你所看到的压倒性(#3000)错误的好办法。