阻止 Visual Studio 将 using 指令放在命名空间之外
Posted
技术标签:
【中文标题】阻止 Visual Studio 将 using 指令放在命名空间之外【英文标题】:Stop Visual Studio from putting using directives outside namespace 【发布时间】:2014-12-25 02:14:14 【问题描述】: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] 代码不需要 using 指令,可以安全删除
有没有办法简单地设置默认值:
namespace Namespace
public class Class1
【问题讨论】:
可以,可以编辑类模板; ***.com/questions/2072687/… @AlexK。谢谢。投票结束这是一个骗局:) @dav_i:答案可能是重复的——但我猜你不知道模板的存在?因此,基于这一事实可能值得保留这个问题。 同意。并感谢您的回答!将其作为骗子关闭仍然可以使问题继续存在,因此人们仍然可以去Google>This Q>That Q
。
@dav_i - 好点:)
【参考方案1】:
您可以在 Re-sharper 中进行设置。
Re-sharper > 选项 > C# > 命名空间导入 > 将 using 指令添加到最深的范围。
更新:从 VS2015 和 Resharper10 开始,这已经发生了变化。现在在:
代码编辑 > C# > 代码样式 > 引用限定 > 将“使用”指令添加到最深范围
【讨论】:
您好,感谢您的回答。此设置似乎仅在 添加 命名空间时有效。不创建新文件。 您可以使用上面建议的模板,参考***.com/questions/2072687/… 重置该标志适用于 ReSharper8.2 和 VS2013。一路走来。 现在位于代码编辑 > C# > 代码样式 > 引用限定 > 将“使用”指令添加到最深范围。 在 resharper 中再次移动:它现在位于 Code Editing > C# > Syntax Style > Add 'using' directive to deepest scope。【参考方案2】:一般来说,我认为将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$
可能有很多文件要更改!
【讨论】:
一般来说,我认为在类的顶部包含 using 语句没有任何害处 - 编译器将从命名空间内部开始搜索指令,如果没有找到将继续在命名空间之外寻找指令。所以 - 如果你将指令放在命名空间之外,我将在命名空间内创建具有相同名称的类 - 那么将使用“我的”类。将指令放在命名空间中对于在代码中增加更多安全性是非常小的努力 除了 Fabio 的评论之外,范围只是不同,因此在命名空间内或外放置 using 指令是不同的,可能会导致问题。【参考方案3】:现在有一种更简单的方法可以做到这一点,而无需修改模板和 ReSharper。自从 Visual Studio 2019 更新 16.1 已发布,您可以按照以下步骤在命名空间内设置 usings:
-
打开 Visual Studio
在工具栏中,转到工具
在“工具”菜单中,打开选项
在选项列表中,选择 文本编辑器 > C# > 代码样式 > 常规
在底部附近向下滚动,找到'using'首选项部分并将首选'using'指令放置设置为 命名空间内
【讨论】:
【参考方案4】:在 ReSharper 2020 中,它位于代码编辑 > C# > 语法样式 > 将“使用”指令添加到最深范围。
【讨论】:
【参考方案5】:还有一个适用于 VS 2015 和 2017 的 Visual Studio 扩展,可在事后修复 using
声明。它还有一些用于对特定声明进行分组的配置选项(如System.*
)
https://marketplace.visualstudio.com/items?itemName=everfor88.UsingDirectiveFormatter
【讨论】:
【参考方案6】:使用 .editorConfig 可以添加以下内容。
# 'using' directive preferences
csharp_using_directive_placement =inside_namespace:warning
【讨论】:
以上是关于阻止 Visual Studio 将 using 指令放在命名空间之外的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法阻止Visual Studio将Thread启动和完成的语句打印到输出窗口?
阻止 Visual Studio 2013 自动删除作业中的多余空格
在 Visual Studio 2015 中阻止资源文件的语言翻译
在 Visual Studio 中使用 Git 时出现“冲突阻止签出”错误