EditorConfig에 대한 .NET Coding 규칙 설정

.NET 코딩 규칙은 EditorConfig 파일을 사용하여 구성됩니다. EditorConfig 파일을 사용하면 개별 .NET 코딩 규칙을 활성화/비활성화하고 (심각도 수준을 통해) 규칙을 적용하려는 수준을 구성할 수 있습니다. EditorConfig를 사용하여 코드 베이스에 일관성을 적용하는 방법에 대한 자세한 내용을 보려면 이 문서를 참고하세요.

지원되는 .NET 코딩 규칙 범주에는 세 가지가 있습니다.

  • 언어 규칙은 C# 또는 Visual Basic 언어(예: var/명시적 형식)에 적용되는 규칙이며 식 본문 멤버를 사용합니다.
  • 서식 설정 규칙은 제어 블록에서 간격을 보다 쉽게 읽을 수 있기 위한(예: Allman 중괄호) 코드의 레이아웃 및 구조에 대한 규칙입니다.
  • 명명 규칙은 개체를 명명하는 방식을 유지하는 규칙입니다(예: async 메서드는 "Async"로 끝나야 함).

언어 규칙

개요

규칙 형식: options_name = false|true : none|suggestion|warning|error

코드 스타일 옵션에 대해 true(이 옵션 선호) 또는 false(이 옵션 선호 안 함), 콜론(:) 및 심각도(none, silent, suggestion, warning 또는 error)를 지정해야 합니다. 심각도는 코드 베이스에서 원하는 스타일의 적용 수준을 의미합니다.

nonesilent는 동의어이며 사용자에게 표시되어야 한함을 의미하지 않습니다. 이 항목에는 이 규칙을 비활성화하는 효과가 있습니다.

심각도 효과
none/silent 이 스타일을 따르지 않을 경우 사용자에게 아무 메시지도 표시되지 않지만 코드 생성 기능은 이 스타일로 생성됩니다.
suggestion 이 스타일을 따르지 않을 경우 사용자에게 제안으로 표시됩니다(처음 두 문자에 점선이 밑줄로 표시됨).
경고 이 스타일을 따르지 않을 경우 컴파일러 경고가 표시됩니다.
오류 이 스타일을 따르지 않을 경우 컴파일러 오류가 표시됩니다.

.NET 언어 규칙 옵션

"This." 및 "Me." 한정

필드(IDE0003/IDE0009)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
dotnet_style_qualification_for_field C# 및 Visual Basic false:none Visual Studio 2017 RTW
설명 적용됨
True 비정적 메서드에서 사용되는 모든 비정적 필드 앞에 this.(C#) 또는 Me.(Visual Basic)를 추가하는 것이 좋습니다. C#:
this.capacity = 0;

Visual Basic:
Me.capacity = 0
False 비정적 메서드에서 사용되는 모든 비정적 필드 앞에 this.(C#) 또는 Me.(Visual Basic)를 추가하지 않는 것이 좋습니다. C#:
capacity = 0;

Visual Basic:
capacity = 0

예제 editorconfig 파일:

# CSharp and Visual Basic code style settings:
[*.{cs,vb}]
dotnet_style_qualification_for_field = false:suggestion

속성(IDE0003/IDE0009)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
dotnet_style_qualification_for_property C# 및 Visual Basic false:none Visual Studio 2017 RTW
설명 적용됨
True 비정적 메서드에서 사용되는 모든 비정적 속성 앞에 this.(C#) 또는 Me.(Visual Basic)를 추가하는 것이 좋습니다. C#:
this.ID = 0;

Visual Basic:
Me.ID = 0
False 비정적 메서드에서 사용되는 모든 비정적 속성 앞에 this.(C#) 또는 Me.(Visual Basic)를 추가하지 않는 것이 좋습니다. C#:
ID = 0;

Visual Basic:
ID = 0

예제 editorconfig 파일:

# CSharp and Visual Basic code style settings:
[*.{cs,vb}]
dotnet_style_qualification_for_property = false:suggestion

메서드(IDE0003/IDE0009)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
dotnet_style_qualification_for_method C# 및 Visual Basic false:none Visual Studio 2017 RTW
설명 적용됨
True 비정적 메서드 내에서 호출되는 모든 비정적 메서드 앞에 this.(C#) 또는 Me.(VB)를 추가하는 것이 좋습니다. C#:
this.Display();

Visual Basic:
Me.Display()
False 비정적 메서드 내에서 호출되는 모든 비정적 메서드 앞에 this.(C#) 또는 Me.(VB)를 추가하지 않는 것이 좋습니다. C#:
Display();

Visual Basic:
Display()

예제 editorconfig 파일:

# CSharp and Visual Basic code style settings:
[*.{cs,vb}]
dotnet_style_qualification_for_method = false:suggestion

이벤트(IDE0003/IDE0009)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
dotnet_style_qualification_for_event C# 및 Visual Basic false:none Visual Studio 2017 RTW
설명 적용됨
True 비정적 메서드 내에서 참조되는 모든 비정적 이벤트 앞에 this.(C#) 또는 Me.(VB)를 추가하는 것이 좋습니다. C#:
this.Elapsed += Handler;

Visual Basic:
AddHandler Me.Elapsed, AddressOf Handler
False 비정적 메서드 내에서 참조되는 모든 비정적 이벤트 앞에 this.(C#) 또는 Me.(VB)를 추가하지 않는 것이 좋습니다. C#:
Elapsed += Handler;

Visual Basic:
AddHandler Elapsed, AddressOf Handler

예제 editorconfig 파일:

# CSharp and Visual Basic code style settings:
[*.{cs,vb}]
dotnet_style_qualification_for_event = false:suggestion

형식 참조를 위한 언어 키워드(int, string 등) 및 프레임워크 형식 이름

로컬 항목, 매개 변수 및 멤버(IDE0012/IDE0014)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
dotnet_style_predefined_type_for_locals_parameters_members C# 및 Visual Basic true:none Visual Studio 2017 RTW
설명 적용됨
True 로컬 항목, 매개 변수 및 형식 멤버의 경우 언어 키워드로 형식을 나타내는 형식(int, double, float, short, long, decimal, string)에서 형식 이름(Int32, Int64 등) 대신 키워드를 사용하는 것이 좋습니다. C#:
private int _member;

Visual Basic: Private _member As Integer
False 로컬 항목, 매개 변수 및 형식 멤버의 경우 언어 키워드로 형식을 나타내는 형식(int, double, float, short, long, decimal, string)에서 키워드 대신 형식 이름(Int32, Int64 등)을 사용하는 것이 좋습니다. C#:
private Int32 _member;

Visual Basic:
Private _member As Int32

예제 editorconfig 파일:

# CSharp and Visual Basic code style settings:
[*.{cs,vb}]
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion

멤버 액세스 식(IDE0013/IDE0015)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
dotnet_style_predefined_type_for_member_access C# 및 Visual Basic true:none Visual Studio 2017 RTW
설명 적용됨
True 멤버 액세스 식이 키워드 표현(int, double, float, short, long, decimal, string)과 함께 형식에 사용될 때마다 키워드를 사용하는 것이 좋습니다. C#:
var local = int.MaxValue;

Visual Basic:
Dim local = Integer.MaxValue
False 멤버 액세스 식이 키워드 표현(int, double, float, short, long, decimal, string)과 함께 형식에 사용될 때마다 형식 이름을 사용하는 것이 좋습니다. C#:
var local = Int32.MaxValue;

Visual Basic:
Dim local = Int32.MaxValue

예제 editorconfig 파일:

# CSharp and Visual Basic code style settings:
[*.{cs,vb}]
dotnet_style_predefined_type_for_member_access = true:suggestion

식 수준 기본 설정

개체 이니셜라이저(IDE0017)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
dotnet_style_object_initializer C# 및 Visual Basic true:suggestion Visual Studio 2017 RTW
설명 적용됨
True 가능한 경우 개체 이니셜라이저를 사용하여 개체를 초기화하는 것이 좋습니다. C#:
var c = new Customer(){ Age = 21 };

Visual Basic:
Dim c = New Customer() With { .Age = 21 }
False 개체 이니셜라이저를 사용하여 개체를 초기화하지 않는 것이 좋습니다. C#:
var c = new Customer();
c.Age = 21;

Visual Basic:
Dim c = new Customer()
c.Age = 21

예제 editorconfig 파일:

# CSharp and Visual Basic code style settings:
[*.{cs,vb}]
dotnet_style_object_initializer = true:suggestion

컬렉션 이니셜라이저(IDE0028)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
dotnet_style_collection_initializer C# 및 Visual Basic true:suggestion Visual Studio 2017 RTW
설명 적용됨
True 가능한 경우 컬렉션 이니셜라이저를 사용하여 컬렉션을 초기화하는 것이 좋습니다. C#:
var list = new List<int>{ 1, 2, 3 };

Visual Basic:
Dim list = new List(Of Integer) From { 1, 2, 3}
False 컬렉션 이니셜라이저를 사용하여 컬렉션을 초기화하지 않는 것이 좋습니다. C#:
var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);

Visual Basic:
Dim list = new List(Of Integer)
list.Add(1)
list.Add(2)
list.Add(3)

예제 editorconfig 파일:

# CSharp and Visual Basic code style settings:
[*.{cs,vb}]
dotnet_style_collection_initializer = true:suggestion

명시적 튜플 이름(IDE0033)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
dotnet_style_explicit_tuple_names C# 7.0+ 및 Visual Basic 15+ true:suggestion Visual Studio 2017 RTW
설명 적용됨
True ItemX 속성보다 튜플 이름을 사용하는 것이 좋습니다. C#:
(string name, int age) customer = GetCustomer();
var name = customer.name;

Visual Basic:
Dim customer As (name As String, age As Integer) = GetCustomer()
Dim name = customer.name
False 튜플 이름보다 ItemX 속성을 사용하는 것이 좋습니다. C#:
(string name, int age) customer = GetCustomer();
var name = customer.Item1;

Visual Basic:
Dim customer As (name As String, age As Integer) = GetCustomer()
Dim name = customer.Item1

예제 editorconfig 파일:

# CSharp and Visual Basic code style settings:
[*.{cs,vb}]
dotnet_style_explicit_tuple_names = true:suggestion

"null" 검사에 식 병합(IDE0029)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
dotnet_style_coalesce_expression C# 및 Visual Basic true:suggestion Visual Studio 2017 RTW
설명 적용됨
True 3개로 구성된 연산자 검사보다 null 병합 식을 사용하는 것이 좋습니다. C#:
var v = x ?? y;

Visual Basic:
Dim v = If(x, y)
False null 병합 식보다 3개로 구성된 연산자 검사를 사용하는 것이 좋습니다. C#:
var v = x != null ? x : y; // or
var v = x == null ? y : x;

Visual Basic:
Dim v = If(x Is Nothing, y, x) ' or
Dim v = If(x IsNot Nothing, x, y)

예제 editorconfig 파일:

# CSharp and Visual Basic code style settings:
[*.{cs,vb}]
dotnet_style_coalesce_expression = true:suggestion

"null" 검사의 Null 전파(IDE0031)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
dotnet_style_null_propagation C# 6.0 이상 및 Visual Basic 14 이상 true:suggestion Visual Studio 2017 RTW
설명 적용됨
True 가능한 경우 null 조건부 연산자를 사용하는 것이 좋습니다. C#:
var v = o?.ToString();

Visual Basic:
Dim v = o?.ToString()
False 가능한 경우 3개로 구성된 null 검사를 사용하는 것이 좋습니다. C#:
var v = o == null ? null : o.ToString(); // or
var v = o != null ? o.String() : null;

Visual Basic:
Dim v = If(o Is Nothing, Nothing, o.ToString()) ' or
Dim v = If(o IsNot Nothing, o.ToString(), Nothing)

예제 editorconfig 파일:

# CSharp and Visual Basic code style settings:
[*.{cs,vb}]
dotnet_style_null_propagation = true:suggestion

CSharp 코드 스타일 설정

"var" 및 명시적 형식

기본 제공 형식의 "var"(IDE0007, IDE0008)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_var_for_built_in_types C# true:none Visual Studio 2017 RTW
설명 적용됨
True int 등의 기본 제공 시스템 형식에 var을 사용하는 것이 좋습니다. C#:
var x = 5;
False int 등의 기본 제공 시스템 형식에 var을 사용하지 않는 것이 좋습니다. C#:
int x = 5;

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_var_for_built_in_types = true:suggestion

형식이 명확한 경우 "var" 사용(IDE0007, IDE0008)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_var_when_type_is_apparent C# true:none Visual Studio 2017 RTW
설명 적용됨
True 선언 식의 오른쪽에서 형식이 이미 언급된 경우 var을 사용하는 것이 좋습니다. C#:
var obj = new C();
False 선언 식의 오른쪽에서 형식이 이미 언급된 경우 var을 사용하지 않는 것이 좋습니다. C#:
C obj = new C();

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_var_when_type_is_apparent = true:suggestion

다른 곳에서 "var" 사용(IDE0007, IDE0008)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_var_elsewhere C# true:none Visual Studio 2017 RTW
설명 적용됨
True 다른 코드 스타일 규칙에 의해 재정의되지 않는 경우 항상 var을 사용하는 것이 좋습니다. C#:
var f = this.Init();
False 다른 코드 스타일 규칙에 의해 재정의되지 않는 경우 항상 var을 사용하지 않는 것이 좋습니다. C#:
bool f = this.Init();

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_var_elsewhere = true:suggestion

식 본문 멤버

메서드(IDE0022)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_expression_bodied_methods C# 6.0+ false:none Visual Studio 2017 RTW
설명 적용됨
True 메서드에 식 본문 멤버를 사용하는 것이 좋습니다. C#:
public int GetAge() => this.Age;
False 메서드에 식 본문 멤버를 사용하지 않는 것이 좋습니다. C#:
public int GetAge() { return this.Age; }

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_expression_bodied_methods = false:none

생성자(IDE0021)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_expression_bodied_constructors C# 7.0+ false:none Visual Studio 2017 RTW
설명 적용됨
True 생성자에 식 본문 멤버를 사용하는 것이 좋습니다. C#:
public Customer(int age) => Age = age;
False 생성자에 식 본문 멤버를 사용하지 않는 것이 좋습니다. C#:
public Customer(int age) { Age = age; }

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_expression_bodied_constructors = false:none

연산자(IDE0023, IDE0024)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_expression_bodied_operators C# 7.0+ false:none Visual Studio 2017 RTW
설명 적용됨
True 연산자에 식 본문 멤버를 사용하는 것이 좋습니다. C#:
public static ComplexNumber operator +(ComplexNumber c1, ComplexNumber c2)
=> new ComplexNumber(c1.Real + c2.Real, c1.Imaginary + c2.Imaginary);
False 연산자에 식 본문 멤버를 사용하지 않는 것이 좋습니다. C#:
public static ComplexNumber operator +(ComplexNumber c1, ComplexNumber c2)
{ return new ComplexNumber(c1.Real + c2.Real, c1.Imaginary + c2.Imaginary); }

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_expression_bodied_operators = false:none

속성(IDE0025)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_expression_bodied_properties C# 7.0+ true:none Visual Studio 2017 RTW
설명 적용됨
True 속성에 식 본문 멤버를 사용하는 것이 좋습니다. C#:
public int Age => _age;
False 속성에 식 본문 멤버를 사용하지 않는 것이 좋습니다. C#:
public int Age { get { return _age; }}

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_expression_bodied_properties = true:none

인덱서(IDE0026)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_expression_bodied_indexers C# 7.0+ true:none Visual Studio 2017 RTW
설명 적용됨
True 인덱서에 식 본문 멤버를 사용하는 것이 좋습니다. C#:
public T this[int i] => _value[i];
False 인덱서에 식 본문 멤버를 사용하지 않는 것이 좋습니다. C#:
public T this[int i] { get { return _values[i]; } }

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_expression_bodied_indexers = false:none

접근자(IDE0027)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_expression_bodied_accessors C# 7.0+ true:none Visual Studio 2017 RTW
설명 적용됨
True 접근자에 식 본문 멤버를 사용하는 것이 좋습니다. C#:
public int Age { get => _age; set => _age = value; }
False 접근자에 식 본문 멤버를 사용하지 않는 것이 좋습니다. C#:
public int Age { get { return _age; } set { _age = value; } }

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_expression_bodied_accessors = false:none

패턴 일치

"cast" 검사를 포함하는 "is"(IDE0020)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_pattern_matching_over_is_with_cast_check C# 7.0+ true:suggestion Visual Studio 2017 RTW
설명 적용됨
True 캐스트를 포함하는 is 식보다 패턴 일치를 사용하는 것이 좋습니다. C#:
if (o is int i) {...}
False 패턴 일치보다 형식 캐스트를 포함하는 is 식을 사용하는 것이 좋습니다. C#:
if (o is int) {var i = (int)o; ... }

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion

"null" 검사를 포함하는 "as"(IDE0019)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_pattern_matching_over_as_with_null_check C# 7.0+ true:suggestion Visual Studio 2017 RTW
설명 적용됨
True null 검사를 포함하는 as 식 대신 패턴 일치를 사용하여 항목이 특정 형식인지 확인하는 것이 좋습니다. C#:
if (o is string s) {...}
False 패턴 일치 대신 null 검사를 포함하는 as 식을 사용하여 항목이 특정 형식인지 확인하는 것이 좋습니다. C#:
var s = o as string; if (s != null) {...}

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion

인라인 변수 선언(IDE0018)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_inlined_variable_declaration C# 7.0+ true:suggestion Visual Studio 2017 RTW
설명 적용됨
True 가능한 경우 out 변수를 인라인으로 선언하는 것이 좋습니다. C#:
if (int.TryParse(value, out int i) {...}
False 가능한 경우 out 변수를 명시적으로 선언하는 것이 좋습니다. C#:
int i; if (int.TryParse(value, out i) {...}

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_inlined_variable_declaration = true:suggestion

식 수준 기본 설정

default 식 단순화(IDE0034)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_prefer_simple_default_expression C# 7.1+ true:suggestion Visual Studio 2017 v. 15.3
설명 적용됨
True default(T)보다 default 선호 C#:
void DoWork(CancellationToken cancellationToken = default){ ... }
False 선호 C#:
void DoWork(CancellationToken cancellationToken = default(CancellationToken)){ ... }

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_prefer_simple_default_expression = true:suggestion

"Null" 검사 기본 설정

Throw 식(IDE0016)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_throw_expression C# 7.0+ true:suggestion Visual Studio 2017 RTW
설명 적용됨
True throw 문 대신 throw 식을 사용하는 것이 좋습니다. C#:
this.s = ss ?? throw new ArgumentNullException(nameof(s));
False throw 식 대신 throw 문을 사용하는 것이 좋습니다. C#:
if (s==null) {throw new ArgumentNullException(nameof(s));} this.s = s;

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_throw_expression = true:suggestion

조건부 대리자 호출 선호(IDE0041)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_style_conditional_delegate_call C# 6.0+ true:suggestion Visual Studio 2017 RTW
설명 적용됨
True null 검사를 수행하는 대신 람다 호출 시 조건부 병합 연산(?.)을 사용하는 것이 좋습니다. C#:
func?.Invoke(args);
False 조건부 병합 연산자(?.)를 사용하는 대신 람다 호출 시 null 검사를 수행하는 것이 좋습니다. C#:
if (func!=null) { func(args); }

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_style_conditional_delegate_call = false:suggestion

"코드 블록 기본 설정

중괄호 기본 사용(IDE0011)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_prefer_braces C# true:none Visual Studio 2017 v. 15.3
설명 적용됨
True 중괄호 기본 사용 C#:
if (test) { this.Display(); }
False 가능하면 중괄호 없음 기본 사용 C#:
if (test) this.Display();

예제 editorconfig 파일:

# CSharp code style settings:
[*.cs]
csharp_prefer_braces = true:none

서식 지정 규칙

개요

규칙 형식: options_name = false|true

규칙을 적용하려는 조건을 대신 지정해야 하는 경우를 제외하고 서식 옵션에 true(이 옵션을 선호함) 또는 false(이 옵션을 선호하지 않음)를 지정해야 합니다.

.NET 서식 지정 옵션

Using 구성

시스템 지시문 먼저 정렬

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
dotnet_sort_system_directives_first C# 및 Visual Basic true Visual Studio 2017 v. 15.3
설명 적용됨
True System.* usings를 사전순으로 정렬하고 다른 using 앞에 배치합니다. C#:
using System.Collections.Generic;
using System.Threading.Tasks;
using Octokit;
False Using의 순서가 필요하지 않습니다 C#:
using System.Collections.Generic;
using Octokit;
using System.Threading.Tasks;

예제 editorconfig 파일:

# .NET formatting settings:
[*.{cs,vb}]
dotnet_sort_system_directives_first = true

C# 서식 지정 설정

줄 바꿈 옵션

여는 중괄호 앞에서 줄 바꿈({)

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_new_line_before_open_brace C# 모두 Visual Studio 2017 v. 15.3
설명
accessors, anonymous_methods, anonymous_types, control_blocks, events, indexers, lambdas, local_functions, methods, object_collection, properties, types. (여러 경우에 ','로 구분합니다.) 지정된 식(Allman 스타일)의 새 줄에 중괄호 필요
모두 모든 식(Allman)의 새 줄에 중괄호 필요
없음 모든 식(K&R)의 동일한 줄에 중괄호 필요

적용됨:

// csharp_new_line_before_open_brace = all
void MyMethod() 
{
    if (...) 
    {
        ...
    }
}
// csharp_new_line_before_open_brace = none
void MyMethod() {
    if (...) {
        ...
    }
}

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_new_line_before_open_brace = methods, properties, control_blocks, types

앞에서 줄 바꿈else

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_new_line_before_else C# true Visual Studio 2017 v. 15.3
설명
True 새 줄에 else 문을 배치합니다.
False 동일한 줄에 else 문을 배치합니다.

적용됨:

// csharp_new_line_before_else = true
if (...) {
    ...
}
else {
    ...
}
// csharp_new_line_before_else = false
if (...) {
    ...
} else {
    ...
}

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_new_line_before_else = true

앞에서 줄 바꿈catch

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_new_line_before_catch C# true Visual Studio 2017 v. 15.3
설명
True 새 줄에 catch 문을 배치합니다.
False 동일한 줄에 catch 문을 배치합니다.

적용됨:

// csharp_new_line_before_catch = true
try {
    ...
}
catch (Exception e) {
    ...
}
// csharp_new_line_before_catch = false
try {
    ...
} catch (Exception e) {
    ...
}

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_new_line_before_catch = true

앞에서 줄 바꿈finally

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_new_line_before_finally C# true Visual Studio 2017 v. 15.3
설명
True finally 문을 닫는 괄호 뒤의 새 줄에 배치해야 합니다.
False finally 문을 닫는 괄호인 동일한 줄에 배치해야 합니다.

적용됨:

// csharp_new_line_before_finally = true
try {
    ...
}
catch (Exception e) {
    ...
}
finally {
    ...
}
// csharp_new_line_before_finally = false
try {
    ...
} catch (Exception e) {
    ...
} finally {
    ...
}

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_new_line_before_finally = true

개체 이니셜라이저의 멤버 앞에서 줄 바꿈

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_new_line_before_members_in_object_initializers C# true Visual Studio 2017 v. 15.3
설명
True 개체 이니셜라이저의 멤버를 별도 줄에 배치해야 합니다.
False 개체 이니셜라이저의 멤버를 동일한 줄에 배치해야 합니다.

적용됨:

// csharp_new_line_before_members_in_object_initializers = true
var z = new B()
{
    A = 3,
    B = 4
}
// csharp_new_line_before_members_in_object_initializers = false
var z = new B()
{
    A = 3, B = 4
}

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_new_line_before_members_in_object_initializers = true

무명 형식의 멤버 앞에서 줄 바꿈

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_new_line_before_members_in_anonymous_types C# true Visual Studio 2017 v. 15.3
설명
True 무명 형식의 멤버를 별도 줄에 배치해야 합니다.
False 무명 형식의 멤버를 동일한 줄에 배치해야 합니다.

적용됨:

// csharp_new_line_before_members_in_anonymous_types = true
var z = new
{
    A = 3,
    B = 4
}
// csharp_new_line_before_members_in_anonymous_types = false
var z = new
{
    A = 3, B = 4
}

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_new_line_before_members_in_anonymous_types = true

쿼리 식 절의 멤버 앞에서 줄 바꿈

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_new_line_within_query_expression_clauses C# true Visual Studio 2017 v. 15.3
설명
True 쿼리 식 절의 요소를 별도 줄에 배치해야 합니다.
False 쿼리 식 절의 요소를 동일한 줄에 배치해야 합니다.

적용됨:

// csharp_new_line_within_query_expression_clauses = true
var q = from a in e
        from b in e
        select a * b;
// csharp_new_line_within_query_expression_clauses = false
var q = from a in e from b in e
        select a * b;

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_new_line_within_query_expression_clauses = true

들여쓰기 옵션

switch 대/소문자 콘텐츠 들여쓰기

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_indent_case_contents C# true Visual Studio 2017 v. 15.3
설명
True switch 대/소문자 콘텐츠 들여쓰기
False switch 대/소문자 콘텐츠 들여쓰지 않기

적용됨:

// csharp_indent_case_contents = true
switch(c) {
    case Color.Red:
        Console.WriteLine("The color is red");
        break;
    case Color.Blue:
        Console.WriteLine("The color is blue");
        break;
    default:
        Console.WriteLine("The color is unknown.");
        break;
}
// csharp_indent_case_contents = false
switch(c) {
    case Color.Red:
    Console.WriteLine("The color is red");
    break;
    case Color.Blue:
    Console.WriteLine("The color is blue");
    break;
    default:
    Console.WriteLine("The color is unknown.");
    break;
}

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_indent_case_contents = true

switch 레이블 들여쓰기

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_indent_switch_labels C# true Visual Studio 2017 v. 15.3
설명
True switch 레이블 들여쓰기
False switch 레이블 들여쓰지 않음

적용됨:

// csharp_indent_switch_labels = true
switch(c) {
    case Color.Red:
        Console.WriteLine("The color is red");
        break;
    case Color.Blue:
        Console.WriteLine("The color is blue");
        break;
    default:
        Console.WriteLine("The color is unknown.");
        break;
}
// csharp_indent_switch_labels = false
switch(c) {
case Color.Red:
    Console.WriteLine("The color is red");
    break;
case Color.Blue:
    Console.WriteLine("The color is blue");
    break;
default:
    Console.WriteLine("The color is unknown.");
    break;
}

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_indent_switch_labels = true

레이블 위치 지정

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_indent_labels C# one_less Visual Studio 2017 v. 15.3
설명
one_less 레이블은 현재 컨텍스트에 하나 적은 들여쓰기로 배치됩니다.
no_change 레이블은 현재 컨텍스트와 동일한 들여쓰기로 배치됩니다.

적용됨:

// csharp_indent_labels = one_less
private string MyMethod(...) 
{
    if (...) {
        goto error;
    }
error:
    throw new Exception(...);
}
// csharp_indent_labels= no_change
private string MyMethod(...) 
{
    if (...) {
        goto error;
    }
    error:
    throw new Exception(...);
}

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_indent_labels = one_less

간격 옵션

캐스트 뒤에 공백

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_space_after_cast C# false Visual Studio 2017 v. 15.3
설명 적용됨
True 캐스트와 값 간의 공백 필요 C#:
int y = (int) x;
False 캐스트와 값 간의 공백 필요 없음 C#:
int y = (int)x;

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_space_after_cast = true

제어 흐름 문의 키워드 뒤에 공백

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_space_after_keywords_in_control_flow_statements C# true Visual Studio 2017 v. 15.3
설명 적용됨
True 키워드 뒤에 공백 필요 C#:
for (int i;i<x;i++) { ... }
False 키워드 뒤에 공백 필요 없음 C#:
for(int i;i<x;i++) { ... }

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_space_after_keywords_in_control_flow_statements = true

메서드 선언 인수 목록 괄호 간의 공백

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_space_between_method_declaration_parameter_list_parentheses C# false Visual Studio 2017 v. 15.3
설명 적용됨
True 키워드 뒤에 공백 필요 C#:
void Bark( int x ) { ... }
False 키워드 뒤에 공백 필요 없음 C#:
void Bark(int x) { ... }

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_space_between_method_declaration_parameter_list_parentheses = true

메서드 호출 인수 목록의 괄호 내 공백

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_space_between_method_call_parameter_list_parentheses C# false Visual Studio 2017 v. 15.3
설명 적용됨
true 제어 흐름 문의 괄호 간에 공백 배치 C#:
MyMethod( argument );
false 식의 괄호 간에 공백 배치 C#:
MyMethod(argument);

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_space_between_method_call_parameter_list_parentheses = control_flow_statements, type_casts

다른 옵션의 괄호 내 공백

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_space_between_parentheses C# false Visual Studio 2017 v. 15.3
설명 적용됨
control_flow_statements 제어 흐름 문의 괄호 간에 공백 배치 C#:
for( int i;i<x;i++ ) { ... }
식의 괄호 간에 공백 배치 C#:
var z = ( x * y ) - ( ( y - x ) * 3);
type_casts 형식 캐스트의 괄호 간에 공백 배치 C#:
int y = ( int )x;

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_space_between_parentheses = control_flow_statements, type_casts

래핑 옵션

문과 멤버 선언을 동일한 줄에 유지

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_preserve_single_line_statements C# true Visual Studio 2017 v. 15.3
설명
True 문과 멤버 선언을 동일한 줄에 유지
False 문과 멤버 선언을 다른 줄에 유지

적용됨

//csharp_preserve_single_line_statements = true
int i = 0; string name = "John";
//csharp_preserve_single_line_statements = false
int i = 0; 
string name = "John";

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_preserve_single_line_statements = true

블록을 한 줄에 유지

옵션 이름 해당 언어 Visual Studio 기본값 지원되는 버전
csharp_preserve_single_line_blocks C# true Visual Studio 2017 v. 15.3
설명
True 블록을 한 줄에 유지
False 블록을 별도 줄에 유지

적용됨

//csharp_preserve_single_line_blocks = true
public int Foo { get; set; }
//csharp_preserve_single_line_blocks = false
public int MyProperty
{ 
    get; set;
}

예제 editorconfig 파일:

# CSharp formatting settings:
[*.cs]
csharp_preserve_single_line_blocks = true

명명 규칙

개요

규칙 형식:
namingRuleTitle:
dotnet_naming_rule.<namingRuleTitle>.symbols = <symbolTitle>
dotnet_naming_rule.<namingRuleTitle>.style = <styleTitle>
dotnet_naming_rule.<namingRuleTitle>.severity = none|suggestion|warning|error

symbolTitle:
dotnet_naming_symbols.<symbolTitle>.applicable_kinds = class, struct, interface, enum, property, method, field, event, namespace, delegate, type_parameter
dotnet_naming_symbols.<symbolTitle>.applicable_accessibilities = public, internal, private, protected, protected_internal
dotnet_naming_symbols.<symbolTitle>.required_modifiers = abstract, async, const, readonly, static

styleTitle:
dotnet_naming_style.<styleTitle>.capitalization = pascal_case|camel_case|first_word_upper|all_upper|all_lower
dotnet_naming_style.<styleTitle>.required_prefix = string
dotnet_naming_style.<styleTitle>.required_suffix = string
dotnet_naming_style.<styleTitle>.word_separator = string

명명 규칙 작성

명명 규칙의 경우 기호, 스타일심각도를 지정해야 합니다. 명명 규칙은 가장 구체적인 규칙부터 가장 덜 구체적인 규칙으로 정렬되어야 합니다. 적용할 수 있는 첫 번째 규칙은 적용되는 유일한 규칙이 됩니다.

심각도

다음은 명명 스타일 규칙의 심각도에 유효한 옵션입니다. none, silent, suggestion, warning, error

nonesilent는 동의어이며 사용자에게 표시되어야 한함을 의미하지 않습니다. 이 항목에는 이 규칙을 비활성화하는 효과가 있습니다.

suggestion은 사용자에게 다음이 오류 목록에 표시되고 다음이 IDE에 표시됨을 의미합니다. suggestion 심각도는 실행할 명명 규칙을 허용하지만 빌드를 중단하지는 않습니다.

심각도 효과
none/silent 이 스타일을 따르지 않을 경우 사용자에게 아무 메시지도 표시되지 않지만 코드 생성 기능은 이 스타일로 생성됩니다.
suggestion 이 스타일을 따르지 않을 경우 사용자에게 제안으로 표시됩니다(처음 두 문자에 점선이 밑줄로 표시됨).
경고 이 스타일을 따르지 않을 경우 컴파일러 경고가 표시됩니다.
오류 이 스타일을 따르지 않을 경우 컴파일러 오류가 표시됩니다.

기호 사양

어떤 기호가 어떤 한정자 및 어떤 액세스 가능성 수준으로 명명 규칙을 적용해야 하는지 식별합니다.

옵션 이름 dotnet_naming_rule.<namingRuleTitle>.symbols
dotnet_naming_symbols.<symbolTitle>.applicable_kinds
dotnet_naming_symbols.<symbolTitle>.applicable_accessibilities
dotnet_naming_symbols.<symbolTitle>.required_modifiers
기호 액세스 가능성 한정자
* * abstract
class public must_inherit
struct internal(C#) / const
interface friend(Visual Basic) readonly
enum private static
property protected shared
method protected_internal(C#)
field protected_friend(Visual Basic)
event
delegate

스타일 사양

기호에 적용할 명명 스타일을 식별합니다.

옵션 이름 dotnet_naming_rule.<namingRuleTitle>.style = <styleTitle>
dotnet_naming_style.<styleTitle>.capitalization
dotnet_naming_style.<styleTitle>.required_prefix
dotnet_naming_style.<styleTitle>.required_suffix
dotnet_naming_style.<styleTitle>.word_separator
스타일 설명
접두사 식별자 앞에 표시되어야 하는 필수 문자입니다.
접미사 식별자 뒤에 표시되어야 하는 필수 문자입니다.
단어 구분 기호 식별자에서 단어 간의 필수 구분 기호입니다.
대문자 표시 pascal_case, camel_case, first_word_upper, all_upper, all_lower

예제 명명 규칙

# Dotnet Naming Conventions
[*.{cs,vb}] 
dotnet_naming_rule.async_methods_end_in_async.symbols  = any_async_methods
dotnet_naming_rule.async_methods_end_in_async.style    = end_in_async
dotnet_naming_rule.async_methods_end_in_async.severity = suggestion

dotnet_naming_symbols.any_async_methods.applicable_kinds           = method
dotnet_naming_symbols.any_async_methods.applicable_accessibilities = *
dotnet_naming_symbols.any_async_methods.required_modifiers         = async

dotnet_naming_style.end_in_async.required_suffix = Async
dotnet_naming_style.end_in_async.capitalization  = pascal_case