在命名空间外使用语句被识别为不同的命名空间
本文关键字:命名空间 识别 语句 | 更新日期: 2023-09-27 18:28:20
我的类中有一些using语句。ReSharper说我需要添加另一个名称空间,所以我让它添加它。它在名称空间声明之外的顶部添加它,我们都很好。
但是StyleCop表示using需要位于命名空间声明内部。所以我把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"
我该如何阻止visualstudio认为它需要命名空间中的"MyCompany"部分。请记住,有一个名为"MyCompany.Owin"的命名空间,但我在项目中没有引用它。
我不知道为什么会发生这种情况,也不知道如何避免这种情况,但一种方法是指示C#编译器在尝试解析名称之前从全局命名空间启动。
您只需在名称空间前面加上global::
修饰符(是的,里面有两个冒号),如下所示:
using global::Owin;
你也可以在类型上使用这个"技巧",假设你有一个接近类型,它的名称与其他名称相匹配,无论名称空间的哪个组合如何,编译器仍然认为它应该使用你的接近类型(通常这表明你的名称不好,但这是另一个问题):
using (var stream = new global::System.IO.FileStream(...))