EditorConfig 控制文件作用域命名空间声明

32

我正在使用 C# 10 的新特性 文件作用域命名空间声明

我有类似这样的旧代码

namespace SampleCode
{
    public class MyClass
    {
    }
}

我正在将这段代码移至

namespace SampleCode;

public class MyClass
{
}

但我有很多警告:IDE0160: 转换为块作用域命名空间

我该如何确保人们仅使用旧语法时才会收到警告?


你使用的是哪个集成开发环境(IDE)? - Vivek Nuna
1
VS2022和VS Code - JuChom
2个回答

35

要在编辑器配置中控制代码风格,请使用以下行:

强制执行此样式

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

8
将其在.editorconfig中执行,使得在VS2022预览版中重构整个解决方案以文件范围命名空间的选项可用,非常不错! - Oskar

19

更新 2022-01-27(所有场景设置完成)

JetBrains Rider从版本2021.3.2开始支持dotnet_diagnostic.IDE*语法。
这简化了所有可能场景的设置:

EditorConfig

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

CSProj

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

这将涵盖所有情况。以下是原始答案。仍然值得阅读。


根据您的期望状态、使用的 IDE 和工作流程,有几个不同的设置需要控制。

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

以下是文件范围和块范围 usings 的 EditorConfig/CSproj 设置摘要。

用于文件范围 using 的 EditorConfig/CSproj 设置


Visual Studio(违规错误)

EditorConfig

csharp_style_namespace_declarations = file_scoped
dotnet_diagnostic.IDE0161.severity = error

注意

option = rule:severity 的语法迟早会被弃用


JetBrains Rider(违规错误)

EditorConfig

csharp_style_namespace_declarations = file_scoped:error

注意

Rider不支持dotnet_diagnostic.IDE*语法。


CLI构建,例如CI/CD流水线

EditorConfig

csharp_style_namespace_declarations = file_scoped
dotnet_diagnostic.IDE0161.severity = error

CSProj

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

推荐设置

EditorConfig

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

CSProj

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

注意

当前的.NET EditorConfig语法是否混乱?绝对是的

块作用域using的EditorConfig/CSproj设置


Visual Studio(违规错误)

EditorConfig

csharp_style_namespace_declarations = block_scoped
dotnet_diagnostic.IDE0160.severity = error

注意

option = rule:severity 的语法迟早会被弃用


JetBrains Rider(违规错误)

EditorConfig

csharp_style_namespace_declarations = block_scoped:error

注意

Rider不支持dotnet_diagnostic.IDE*语法。


CLI构建,例如CI/CD流水线

EditorConfig

csharp_style_namespace_declarations = block_scoped
dotnet_diagnostic.IDE0160.severity = error

CSProj

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

推荐设置

EditorConfig

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

CSProj

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

1
你同时使用了 IDE0160IDE0161 - 它们有什么区别? - lonix
5
@lonix IDE0160 = 块级作用域,IDE0161 = 文件级作用域 - KUTlime

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接