EditorConfig 控件文件范围的命名空间声明

Posted

技术标签:

【中文标题】EditorConfig 控件文件范围的命名空间声明【英文标题】:EditorConfig control File-scoped namespace declaration 【发布时间】:2022-01-05 06:54:43 【问题描述】:

我正在使用 C# 10 新功能 File-scoped namespace declaration

我有这样的旧代码

namespace SampleCode

    public class MyClass
    
    

我将此代码移至

namespace SampleCode;

public class MyClass


但我有一堆警告:IDE0160: Convert to block scoped namespace

我如何确保人们只会收到旧语法的警告?

【问题讨论】:

您使用的是哪个 IDE? VS2022 和 VS 代码 【参考方案1】:

要控制 editorconfig 中的代码样式,请使用以下行:

强制执行此样式

namespace SampleCode

    public class MyClass
    
    

.editorconfig中添加这一行

# IDE0160: Convert to block-scoped namespace
csharp_style_namespace_declarations = block_scoped:warning

强制执行此样式

namespace SampleCode;

public class MyClass


.editorconfig中添加这一行

# IDE0160: Convert to file-scoped namespace
csharp_style_namespace_declarations = file_scoped:warning

【讨论】:

在 .editorconfig 中强制执行它可以选择将整个解决方案重构为 VS2022 预览版中可用的文件范围命名空间,太棒了!【参考方案2】:

2022-01-27 更新

Jetbrain Rider 从 2021.3.2 版本开始支持 dotnet_diagnostic.IDE* 语法。这简化了设置到

编辑器配置

csharp_style_namespace_declarations = file_scoped
dotnet_diagnostic.IDE0161.severity = error

CSProj

<PropertyGroup>
  <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>

这将涵盖所有场景。下面的原始答案。还是值得一读的。


您应该根据所需的状态、使用的 IDE 和工作流程来控制几种不同的设置。

它们在this 文章中有所描述,我强烈建议您在开始为您的项目构建.editorconfig 之前阅读这篇文章。

这里分别总结了文件范围和块范围的使用。

文件范围使用的EditorConfig/CSproj设置


Visual Studio(违规错误)

编辑器配置

csharp_style_namespace_declarations = file_scoped
dotnet_diagnostic.IDE0161.severity = error

注意

语法option = rule:severity 迟早会是deprecated。


JetBrain Rider(违规错误)

编辑器配置

csharp_style_namespace_declarations = file_scoped:error

注意

Rider 不支持 dotnet_diagnostic.IDE* 语法。


CLI 构建,例如 CI/CD 管道

编辑器配置

csharp_style_namespace_declarations = file_scoped
dotnet_diagnostic.IDE0161.severity = error

CSProj

<PropertyGroup>
  <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>

推荐设置

编辑器配置

csharp_style_namespace_declarations = file_scoped:error
dotnet_diagnostic.IDE0161.severity = error

CSProj

<PropertyGroup>
  <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>

注意

当前的 .NET EditorConfig 语法是不是一团糟? 肯定

块范围使用的EditorConfig/CSproj设置


Visual Studio(违规错误)

编辑器配置

csharp_style_namespace_declarations = block_scoped
dotnet_diagnostic.IDE0160.severity = error

注意

语法option = rule:severity 迟早会是deprecated。


JetBrain Rider(违规错误)

编辑器配置

csharp_style_namespace_declarations = block_scoped:error

注意

Rider 不支持 dotnet_diagnostic.IDE* 语法。


CLI 构建,例如 CI/CD 管道

编辑器配置

csharp_style_namespace_declarations = block_scoped
dotnet_diagnostic.IDE0160.severity = error

CSProj

<PropertyGroup>
  <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>

推荐设置

编辑器配置

csharp_style_namespace_declarations = block_scoped:error
dotnet_diagnostic.IDE0160.severity = error

CSProj

<PropertyGroup>
  <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>

【讨论】:

以上是关于EditorConfig 控件文件范围的命名空间声明的主要内容,如果未能解决你的问题,请参考以下文章

限制头文件中“使用命名空间”的范围

.NET 6新特性试用 | 文件范围的命名空间

ASP.NET:通过命名空间一次注册多个控件?

VS 2022 - 在所有文件中转换为文件范围的命名空间

如何在类模板中使用文件范围的命名空间声明?

C++ 中命名空间别名的范围是啥?