오류 및 경고를 보고하는 C# 컴파일러 옵션

다음 옵션은 컴파일러가 오류 및 경고를 보고하는 방법을 제어합니다. 새 MSBuild 구문은 굵게 표시됩니다. 이전 csc.exe 구문은 code style에 표시됩니다.

  • WarningLevel / -warn: 경고 수준을 설정합니다.
  • AnalyticLevel: 선택적 경고 수준을 설정합니다.
  • TreatWarningsAsErrors / -warnaserror: 모든 경고를 오류로 처리
  • WarningsAsErrors / -warnaserror: 하나 이상의 경고를 오류로 처리
  • WarningsNotAsErrors / -warnnotaserror: 하나 이상의 경고를 오류로 처리하지 않음
  • NoWarn / -nowarn: 사용하지 않도록 설정된 경고 목록을 설정합니다.
  • CodeAnalysisRuleSet / -ruleset: 특정 진단을 비활성화하는 규칙 집합 파일을 지정합니다.
  • ErrorLog / -errorlog: 모든 컴파일러와 분석기 진단을 로그할 파일을 지정합니다.
  • ReportAnalyzer / -reportanalyzer: 실행 시간과 같은 추가 분석기 정보를 보고합니다.

WarningLevel

WarningLevel 옵션은 컴파일러에서 표시할 경고 수준을 지정합니다.

<WarningLevel>3</WarningLevel>

요소 값은 컴파일에 대해 표시할 경고 수준입니다. 숫자가 낮을수록 높은 심각도 경고만 표시됩니다. 숫자가 높을수록 더 많은 경고가 표시됩니다. 값은 0 또는 양의 정수여야 합니다.

경고 수준 의미
0 모든 경고 메시지 내보내기를 끕니다.
1 심각한 경고 메시지를 표시합니다.
2 수준 1 경고와 덜 심각한 특정 경고(예: 클래스 멤버 숨기기에 대한 경고)를 표시합니다.
3 수준 2 경고와 덜 심각한 특정 경고(예: 항상 true 또는 false로 평가되는 식에 대한 경고)를 표시합니다.
4(기본값) 모든 수준 3 경고와 정보 경고를 표시합니다.

Warning

컴파일러 명령줄은 4보다 큰 값을 허용하여 경고 웨이브 경고를 사용하도록 설정합니다. 그러나 .NET SDK는 프로젝트 파일의 AnalyticLevel과 일치하도록 WarningLevel을 설정합니다.

오류 또는 경고에 대한 정보를 가져오려면 도움말 색인에서 오류 코드를 조회할 수 있습니다. 오류 또는 경고에 대한 정보를 가져오는 다른 방법은 C# 컴파일러 오류를 참조하세요. TreatWarningsAsErrors를 사용하여 모든 경고를 오류로 처리합니다. DisabledWarnings를 사용하여 특정 경고를 비활성화합니다.

분석 수준

AnalyticLevel 옵션은 사용하도록 설정할 추가 경고 웨이브 및 분석기를 지정합니다. 경고 웨이브 경고는 코드를 개선하거나 예정된 릴리스와 호환되는지 확인하는 추가 검사입니다. 분석기는 코드를 개선하기 위해 린트와 같은 기능을 제공합니다.

<AnalysisLevel>preview</AnalysisLevel>
분석 수준 의미
5 선택적 경고 웨이브 5 경고를 모두 표시합니다.
6 선택적 경고 웨이브 6 경고를 모두 표시합니다.
7 선택적 경고 웨이브 7 경고를 모두 표시합니다.
최신(기본값) 현재 릴리스까지의 모든 정보 경고를 표시합니다.
미리 보기 최신 미리 보기 릴리스까지의 모든 정보 경고를 표시합니다.
없음 모든 정보 경고를 끕니다.

선택적 경고에 대한 자세한 내용은 경고 웨이브를 참조하세요.

오류 또는 경고에 대한 정보를 가져오려면 도움말 색인에서 오류 코드를 조회할 수 있습니다. 오류 또는 경고에 대한 정보를 가져오는 다른 방법은 C# 컴파일러 오류를 참조하세요. TreatWarningsAsErrors를 사용하여 모든 경고를 오류로 처리합니다. 특정 경고를 사용하지 않으려면 NoWarn을 사용합니다.

TreatWarningsAsErrors

TreatWarningsAsErrors 옵션은 모든 경고를 오류로 처리합니다. 또한 WarningsAsErrors를 사용하여 일부 경고만 오류로 설정할 수도 있습니다. TreatWarningsAsErrors를 설정하면 WarningsNotAsErrors를 사용하여 오류로 처리되어서는 안 되는 경고를 나열할 수 있습니다.

<TreatWarningsAsErrors>true</TreatWarningsAsErrors>

대신 모든 경고 메시지가 오류로 보고됩니다. 빌드 프로세스가 중단됩니다(출력 파일이 빌드되지 않음). 기본적으로 TreatWarningsAsErrors는 적용되지 않습니다. 즉, 경고가 출력 파일을 생성하지 못합니다. 필요에 따라 몇 개의 특정 경고만 오류로 처리하려는 경우 오류로 처리할 경고 번호의 쉼표로 구분된 목록을 지정할 수 있습니다. 모든 Null 허용 여부 경고 집합은 Null 허용 축약형을 사용하여 지정할 수 있습니다. WarningLevel을 사용하여 컴파일러에서 표시할 경고 수준을 지정합니다. 특정 경고를 사용하지 않으려면 NoWarn을 사용합니다.

Important

csproj 파일에서 <TreatWarningsAsErrors> 요소를 사용하는 것과 warnaserror MSBuild 명령줄 스위치를 사용하는 것 사이에는 두 가지 미묘한 차이점이 있습니다. TreatWarningsAsErrors는 C# 컴파일러에만 영향을 미치며 csproj 파일의 다른 MSBuild 작업에는 영향을 미치지 않습니다. warnaserror 명령줄 스위치는 모든 작업에 영향을 미칩니다. 둘째, 컴파일러는 TreatWarningsAsErrors가 사용될 때 어떤 경고에도 출력을 생성하지 않습니다. 컴파일러는 warnaserror 명령줄 스위치가 사용될 때 출력을 생성합니다.

WarningsAsErrors 및 WarningsNotAsErrors

WarningsAsErrorsWarningsNotAsErrors 옵션은 경고 목록에 대해 TreatWarningsAsErrors 옵션을 재정의합니다. 이 옵션은 모든 CS 경고와 함께 사용할 수 있습니다. "CS" 접두사는 선택 사항입니다. 숫자를 사용하거나 "CS" 뒤에 오류 또는 경고 번호를 사용할 수 있습니다. 경고에 영향을 미치는 다른 요소에 대해서는 일반 MSBuild 속성을 참조하세요.

경고 0219 및 0168을 오류로 설정합니다.

<WarningsAsErrors>0219,CS0168</WarningsAsErrors>

오류와 동일한 경고를 비활성화합니다.

<WarningsNotAsErrors>0219,CS0168</WarningsNotAsErrors>

WarningsAsErrors를 사용하여 경고 세트를 오류로 구성합니다. WarningsNotAsErrors를 사용하여 모든 경고를 오류로 설정한 경우 오류가 아니어야 하는 경고 세트를 구성합니다.

NoWarn

NoWarn 옵션을 사용하면 컴파일러가 하나 이상의 경고를 표시하지 않도록 할 수 있습니다. 여기서 warningnumber1, warningnumber2는 컴파일러가 표시하지 않도록 하려는 경고 번호입니다. 여러 경고 번호를 쉼표로 구분합니다.

<NoWarn>warningnumber1,warningnumber2</NoWarn>

경고 식별자의 숫자 부분만 지정하면 됩니다. 예를 들어 CS0028을 표시하지 않으려면 <NoWarn>28</NoWarn>를 지정할 수 있습니다. 컴파일러는 이전 릴리스에서는 유효했지만 제거된 NoWarn에 전달된 경고 번호를 자동으로 무시합니다. 예를 들어 CS0679는 Visual Studio .NET 2002의 컴파일러에서 유효했지만 이후에 제거되었습니다.

NoWarn 옵션으로 다음 경고가 표시되지 않도록 설정할 수 있습니다.

  • 컴파일러 경고(수준 1) CS2002
  • 컴파일러 경고(수준 1) CS2023
  • 컴파일러 경고(수준 1) CS2029

경고는 코드에 잠재적인 문제가 있음을 나타내기 위한 것이므로 특정 경고를 사용하지 않도록 설정할 때 발생할 수 있는 위험을 이해해야 합니다. 경고가 가양성이고 런타임 버그가 아니라고 확신하는 경우에만 NoWarn을 사용합니다.

경고를 사용하지 않도록 설정하는 데 좀 더 구체적인 방식을 사용할 수 있습니다.

  • 대부분의 컴파일러는 특정 코드 줄에 대해서만 경고를 사용하지 않도록 설정하는 방법을 제공하므로 동일한 프로젝트의 다른 곳에서 경고가 발생하는 경우에는 경고를 검토할 수 있습니다. C# 코드의 특정 부분에서만 경고를 표시하지 않으려면 #pragma warning을 사용합니다.

  • 빌드 로그에서 더 간결하고 집중된 출력을 보려면 빌드 로그의 자세한 정도를 변경하는 것이 좋습니다. 자세한 내용은 방법: 빌드 로그 파일 보기, 저장 및 구성을 참조하세요.

덮어쓰지 않고 이전에 설정한 NoWarn 값에 경고 번호를 추가하려면 다음 예와 같이 $(NoWarn)을 참조하세요.

   <NoWarn>$(NoWarn);newwarningnumber3;newwarningnumber4</NoWarn>

CodeAnalysisRuleSet

특정 진단을 구성하는 규칙 집합 파일을 지정합니다.

<CodeAnalysisRuleSet>MyConfiguration.ruleset</CodeAnalysisRuleSet>

여기서 MyConfiguration.ruleset은 규칙 집합 파일의 경로입니다. 규칙 집합 사용에 대한 자세한 내용은 규칙 집합에 대한 Visual Studio 설명서의 문서를 참조하세요.

ErrorLog

모든 컴파일러와 분석기 진단을 로그할 파일을 지정합니다.

<ErrorLog>compiler-diagnostics.sarif</ErrorLog>

ErrorLog 옵션을 사용하면 컴파일러에서 SARIF(정적 분석 결과 교환 형) 로그를 출력할 수 있습니다. SARIF 로그는 일반적으로 컴파일러 및 분석기 진단의 결과를 분석하는 도구에서 읽습니다.

ErrorLog 요소에 대한 version 인수를 사용하여 SARIF 형식을 지정할 수 있습니다.

<ErrorLog>logVersion21.json,version=2.1</ErrorLog>

구분 기호는 쉼표(,) 또는 세미콜론(;)일 수 있습니다. 버전에 유효한 값은 "1", "2" 및 "2.1"입니다. 기본값은 "1"입니다. "2"와 "2.1"은 SARIF 버전 2.1.0을 의미합니다.

ReportAnalyzer

실행 시간과 같은 추가적인 분석 정보를 보고합니다.

<ReportAnalyzer>true</ReportAnalyzer>

ReportAnalyzer 옵션을 사용하면 컴파일러가 빌드에서 분석기의 성능 특성을 자세히 설명하는 추가 MSBuild 로그 정보를 내보냅니다. 일반적으로 분석기 작성자가 분석기의 유효성을 검사하는 과정에서 사용합니다.

Important

이 플래그에 의해 생성된 추가 로그 정보는 -verbosity:detailed 명령줄 옵션이 사용되는 경우에만 생성됩니다. 자세한 내용은 MSBuild 설명서의 스위치 문서를 참조하세요.