阻止Visual Studio在命名空间外部使用指令

时间:2014-10-29 11:33:29

标签: c# visual-studio visual-studio-2013 resharper stylecop

Visual Studio(或Resharper)中是否有一个设置允许您指定哪些命名空间应该是默认的以及它们放在哪个范围内?

例如,MVC项目的默认值为

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Namespace
{
    public class Class1
    {
    }
}

但是Resharper和Stylecop抱怨道:

  

所有using指令必须放在命名空间内。 [StyleCop规则:SA1200]
  代码不需要使用指令,可以安全地删除

有没有办法简单地制作默认值:

namespace Namespace
{
    public class Class1
    {
    }
}

6 个答案:

答案 0 :(得分:16)

您可以在Re-sharper中设置它。

重新锐化>选项> C#>命名空间导入>将using指令添加到最深的范围。

答案 1 :(得分:9)

一般来说,我不相信将using州长列入最高层是有害的。我实际上发现将它们包含在那里更容易,因此,无论您是否想要尊重该规则,都取决于您。

但是,如果您这样做,则所有文件模板都可用并且可以编辑。请参阅答案How do I edit the Visual Studio templates for new C# class/interface?,详细说明每个Visual Studio版本的位置。

一旦你在那里,你可以改变布局,所以例如基本类看起来像:

using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
$endif$using System.Text;
$if$ ($targetframeworkversion$ >= 4.5)using System.Threading.Tasks;
$endif$
namespace $rootnamespace$
{
    class $safeitemrootname$
    {
    }
}

您可以将其更改为以下内容或类似内容:

namespace $rootnamespace$
{
    using System;
    using System.Collections.Generic;
    $if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
    $endif$using System.Text;
    $if$ ($targetframeworkversion$ >= 4.5)using System.Threading.Tasks;
    $endif$

    class $safeitemrootname$
    {
    }
}

虽然可能会有不少文件需要更改!

答案 2 :(得分:5)

现在有一种更简单的方法可以在不修改模板和 ReSharper 的情况下完成。自 Visual Studio 2019 更新 16.1 以来 发布后,您可以按照以下步骤在命名空间内设置 using:

  1. 打开Visual Studio
  2. 在工具栏中,转到工具
  3. 在“工具”菜单中,打开选项
  4. 在选项列表中,选择Text Editor > C# > Code Style > General
  5. 向下滚动到底部附近,找到'using'偏好部分并将首选'using'指令位置设置为 内部命名空间

enter image description here

答案 3 :(得分:0)

还有一个针对VS 2015和2017的Visual Studio扩展,可在事实发生后修复using声明。它还具有一些用于对特定声明进行分组的配置选项(例如System.*

https://marketplace.visualstudio.com/items?itemName=everfor88.UsingDirectiveFormatter

enter image description here

答案 4 :(得分:0)

在Resharper 2020中,它位于“代码编辑”>“ C#”>“语法样式”>“将'using'”指令添加到最深的作用域。

答案 5 :(得分:0)

使用 .editorConfig 您可以添加以下内容。

# 'using' directive preferences
csharp_using_directive_placement =inside_namespace:warning