命名空间外的 using 语句被识别为不同的命名空间

using statement outside namespace is recognized as a different namespace

我的 class 中有一些 using 语句。 ReSharper 说我需要添加另一个命名空间,所以我让它添加它。它将它添加到顶部,在名称空间声明之外,我们都很好。

但是 StyleCop 说 usings 需要在名称空间声明的内部。所以我将 using 语句移到里面,但是当我将鼠标悬停在 using 语句上时,它说它是一个不同的命名空间。示例如下:

using Owin; // when I hover, it shows up as "Owin", which is correct

namespace MyCompany.Sales.Web
{
    using System.Configuration;
    using System.Web.Http;

向下移动后是这样的:

namespace MyCompany.Sales.Web
{
    using System.Configuration;
    using System.Web.Http;
    using Owin; // but when I hover, it shows up as "MyCompany.Owin"

如何阻止 visual studio 认为它需要命名空间的 "MyCompany" 部分。请记住,有一个名为 "MyCompany.Owin" 的命名空间,但我在项目中没有对它的引用。

我不知道为什么会发生这种情况或如何避免这种情况,但一种方法是指示 C# 编译器在尝试解析名称之前从全局命名空间开始。

您只需在命名空间前加上 global:: 修饰符(是的,里面有两个冒号),如下所示:

using global::Owin;

您也可以在类型上使用此 "trick",假设您有一个 close-by 类型,其名称与其他名称匹配,无论名称空间的哪种组合以及编译器仍然认为它应该使用你更接近的类型(通常这表明你的名字不好,但这是一个不同的问题):

using (var stream = new global::System.IO.FileStream(...))