Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 阻止Visual Studio将使用指令置于命名空间之外_C#_Visual Studio_Visual Studio 2013_Resharper_Stylecop - Fatal编程技术网

C# 阻止Visual Studio将使用指令置于命名空间之外

C# 阻止Visual Studio将使用指令置于命名空间之外,c#,visual-studio,visual-studio-2013,resharper,stylecop,C#,Visual Studio,Visual Studio 2013,Resharper,Stylecop,VisualStudio(或ReSharper)中是否有允许您指定哪些名称空间应为默认名称空间以及将其放入哪个范围的设置 例如,MVC项目的默认值是 using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Namespace { public class Class1 { } } 但ReSharper和StyleCop抱怨: 所有usi

VisualStudio(或ReSharper)中是否有允许您指定哪些名称空间应为默认名称空间以及将其放入哪个范围的设置

例如,MVC项目的默认值是

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

namespace Namespace
{
    public class Class1
    {
    }
}
但ReSharper和StyleCop抱怨:

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

有没有一种方法可以简单地设置默认值:

namespace Namespace
{
    public class Class1
    {
    }
}

一般来说,我认为把
使用
语句放在你班的最前面没有什么坏处。事实上,我发现把它们放在那里比较容易,所以你是否想遵守这条规则取决于你

但是,如果这样做,则所有文件模板都可用,并且可以编辑。查看每个VisualStudio版本上他们居住的详细位置的答案

一旦到了那里,您就可以更改布局,例如,基本类如下所示:

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$
    {
    }
}

不过,可能有很多文件需要更改

您可以在Re sharper中进行设置

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


更新:自VS2015和Resharper10起,此项已移动。现正进行以下工作:


代码编辑>C#>代码样式>参考资格>将“使用”指令添加到最深范围

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


在ReSharper 2020中,它处于代码编辑>C#>语法样式>将“using”指令添加到最深范围下。

现在有一种更简单的方法,无需修改模板,也无需ReSharper。自Visual Studio 2019更新16.1以来 已发布。您可以通过以下步骤在命名空间内设置using:

  • 打开Visual Studio
  • 在工具栏中,转到工具
  • 在工具菜单中,打开选项
  • 在选项列表中,选择文本编辑器>C#>代码样式>常规
  • 向下滚动底部附近,找到“使用”首选项部分,并将首选的“使用”指令放置设置为命名空间内的

  • 使用.editor配置,您可以添加以下内容

    # 'using' directive preferences
    csharp_using_directive_placement =inside_namespace:warning
    

    是的,您可以编辑类模板@亚历克斯克。谢谢投票以重复的方式结束这一过程:)@dav_i:答案可能是重复的-但我猜你不知道模板存在?因此,将这个问题保持在这个事实的基础上可能是值得的。谢谢你的回答!作为一个傻瓜来结束它仍然可以让这个问题保持活跃,这样人们仍然可以去
    Google>这个Q>那个Q
    @dav_i-很好的观点:)嗨,谢谢你的回答。此设置似乎仅在添加名称空间时有效。不创建新文件。您可以使用上面建议的模板,请参阅重置该标志适用于ReSharper8.2和VS2013。绕过。它现在处于代码编辑>C#>代码样式>引用限定>将“使用”指令添加到最深范围。在resharper中再次移动:它现在处于代码编辑>C#>语法样式>将“使用”指令添加到最深范围。一般来说,我认为在类编译器的顶部使用语句没有任何害处将搜索从命名空间内部开始的指令,如果未找到,将继续查找命名空间外部的指令。所以-如果您将指令放在名称空间之外,而我将在名称空间内创建具有相同名称的类,那么将使用“my”类。在名称空间中放置指令对于在代码中添加更多安全性来说是非常小的努力。除了Fabio的评论之外,范围只是不同,所以在名称空间中放置using指令是不同的,并且可能会导致问题。