【问题标题】:using statement outside namespace is recognized as a different namespace命名空间外的 using 语句被识别为不同的命名空间
【发布时间】:2016-04-03 13:21:09
【问题描述】:

我的课堂上有一些 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”的命名空间,但我在项目中没有对它的引用。

【问题讨论】:

  • 编译器是怎么说的?
  • @LasseV.Karlsen 当 using 在命名空间内时,编译器说类型或命名空间不存在,您是否缺少作为程序集引用?
  • 试试using global::Owin; 虽然我不确定global:: 修饰符是否可以与命名空间一起使用。
  • @LasseV.Karlsen 宾果游戏!将其添加为 aswer,以便我可以给你信用!

标签: c# namespaces using


【解决方案1】:

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

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

using global::Owin;

你也可以在类型上使用这个“技巧”,假设你有一个 close-by 类型,它的名称与其他东西匹配,并且无论命名空间和什么的组合,编译器仍然认为它应该使用你的 close-by 类型(通常这表明您的名字不好,但这是另一个问题):

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

【讨论】:

    猜你喜欢
    • 2016-02-23
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2014-01-21
    • 2010-11-08
    • 2011-07-06
    相关资源
    最近更新 更多