Visual Basic에서 경고 구성
Visual Basic 컴파일러에는 런타임 오류를 일으킬 수 있는 코드에 대한 경고 집합이 포함되어 있습니다. 이 정보를 사용하여 더 적은 버그로 더 깨끗하고 빠르고 더 나은 코드를 작성할 수 있습니다. 예를 들어 컴파일러는 사용자가 할당되지 않은 개체 변수의 멤버를 호출하거나, 반환 값을 설정하지 않고 함수에서 반환하거나, 논리에서 오류가 있는 Try
블록을 실행하여 예외를 catch하려고 할 때 경고를 생성합니다.
경우에 따라 컴파일러는 사용자가 가능한 오류를 예측하는 대신 현재 작업에 집중할 수 있도록 사용자를 대신하여 추가 논리를 제공합니다. 이전 버전의 Visual Basic에서는 Option Strict 사용하여 Visual Basic 컴파일러가 제공하는 추가 논리를 제한했습니다. 경고를 구성하면 개별 경고 수준에서 보다 세분화된 방식으로 이 논리를 제한할 수 있습니다.
다른 경고를 오류로 전환하는 동안 프로젝트를 사용자 지정하고 애플리케이션과 관련이 없는 일부 경고를 해제할 수 있습니다. 이 페이지에서는 개별 경고를 켜고 끄는 방법을 설명합니다.
경고 해제 및 켜기
경고를 구성하는 방법에는 여러 가지가 있습니다. 프로젝트 디자이너사용하여 경고를 구성하거나, /warnaserror 및 /nowarn 컴파일러 옵션을 사용하거나, 프로젝트 파일(vbproj
파일)을 편집하고 NoWarn
MSBuild 속성을 사용할 수 있습니다. MSBuild 속성을 사용하려면 전체 Visual Basic 프로젝트 대한 특정 경고 표시 안 함참조하세요.
프로젝트 디자이너 환경은 .NET Framework 프로젝트 또는 .NET Core(또는 .NET 5 이상) 프로젝트로 작업하는지 여부에 따라 다릅니다.
.NET Core(또는 .NET 5 이상) 프로젝트에서 프로젝트 디자이너컴파일 섹션에는 모든 경고를 사용하지 않도록 설정하거나, 모든 경고를 오류로 승격하거나, 각 경고 범주(기본값)를 별도로 제어하는 데 사용할 수 있는 경고 심각도 설정이 포함되어 있습니다. 경고 범주 설정은 프로젝트 디자이너동일한 영역에 표시됩니다.
.NET Framework 프로젝트의 프로젝트 디자이너컴파일 탭에서 모든 경고 사용 안 함 확인란을 선택하여 모든 경고를 사용하지 않도록 설정합니다. 모든 경고를 오류로 처리하려면 모든 경고를 오류 처리합니다. 일부 개별 경고는 표시된 테이블에서 원하는 대로 오류 또는 경고로 전환할 수 있습니다.
프로젝트 디자이너 페이지의 컴파일 탭을 사용하면 경고를 켜고 끌 수 있습니다. 모든 경고를 해제하려면 모든 경고 해제 확인란을 선택하십시오; 모든 경고를 오류로 처리하려면 모든 경고를 오류로 처리 확인란을 선택하십시오. 일부 개별 경고는 표시된 테이블에서 원하는 대로 오류 또는 경고로 전환할 수 있습니다.
Option Strict이 Off설정되면, Option Strict 관련 경고들은 독립적으로 처리할 수 없습니다.
Option StrictOn설정하면 관련 경고는 상태에 관계없이 오류로 처리됩니다. 명령줄 컴파일러에서 /optionstrict:custom
를 지정하여 Option Strict이 Custom으로 설정되면, Option Strict 경고를 독립적으로 켜거나 끌 수 있습니다.
컴파일러의 /warnaserror 명령줄 옵션을 사용하여 경고가 오류로 처리되는지 여부를 지정할 수도 있습니다. 이 옵션에 쉼표로 구분된 목록을 추가하여 + 또는 -를 사용하여 오류 또는 경고로 처리해야 하는 경고를 지정할 수 있습니다. 다음 표에서는 가능한 옵션에 대해 자세히 설명합니다.
명령줄 옵션 | 명시 |
---|---|
/warnaserror+ 또는 /warnaserror |
모든 경고를 오류로 처리 |
/warnsaserror- |
경고를 오류로 처리하지 마세요. 이 설정은 기본값입니다. |
/warnaserror+:<warning list
>
|
쉼표로 구분된 목록 r에서 오류 ID 번호로 나열된 특정 경고를 오류로 처리합니다. |
/warnaserror-:<warning list> |
쉼표로 구분된 목록에 오류 ID 번호로 나열된 특정 경고를 오류로 처리하지 마세요. |
/nowarn |
경고를 보고하지 마세요. |
/nowarn:<warning list> |
쉼표로 구분된 목록에 오류 ID 번호로 나열된 지정된 경고를 보고하지 마세요. |
경고 목록에는 오류로 처리해야 하는 경고의 오류 ID 번호가 포함되어 있으며, 명령줄 옵션과 함께 사용하여 특정 경고를 설정하거나 해제할 수 있습니다. 경고 목록에 잘못된 숫자가 포함되어 있으면 오류가 보고됩니다.
예제
명령줄 인수 예제의 이 표에서는 각 인수가 수행하는 작업을 설명합니다.
논쟁 | 묘사 |
---|---|
vbc /warnaserror |
모든 경고를 오류로 처리되도록 지정합니다. |
vbc /warnaserror:42024 |
경고 42024를 오류로 처리되도록 지정합니다. |
vbc /warnaserror:42024,42025 |
경고 42024 및 42025가 오류로 처리되도록 지정합니다. |
vbc /nowarn |
경고를 보고하지 않음을 지정합니다. |
vbc /nowarn:42024 |
경고 42024를 보고하지 않도록 지정합니다. |
vbc /nowarn:42024,42025 |
경고 42024 및 42025를 보고하지 않도록 지정합니다. |
경고 유형
다음은 오류로 처리할 수 있는 경고 목록입니다.
암시적 변환 경고
암시적 변환 인스턴스에 대해 생성됩니다.
&
연산자를 사용하는 경우 내장 숫자 형식에서 문자열로의 암시적 변환은 포함되지 않습니다. 새 프로젝트의 기본값이 꺼져 있습니다.
ID: 42016
늦게 바인딩된 메서드 호출 및 오버로드 해석 경고
지연 바인딩 인스턴스에 대해 생성됩니다. 새 프로젝트의 기본값은 꺼져 있습니다.
ID: 42017
'Object' 경고 형식의 피연산자
Option Strict On에서는 Object
형식의 피연산자가 발생할 경우 오류가 발생합니다. 새 프로젝트의 기본값은 활성화되어 있습니다.
ID: 42018 및 42019
선언에는 'As' 절에 대한 경고 메시지가 필요합니다.
As
절이 없는 변수, 함수 또는 속성 선언에서 Option Strict On오류가 발생할 때 생성됩니다. 할당된 형식이 없는 변수는 Object
형식으로 간주됩니다. 새 프로젝트의 기본값은 켜져 있습니다.
ID: 42020(변수 선언), 42021(함수 선언) 및 42022(속성 선언).
null 참조 예외 경고가 있을 수 있음
값이 할당되기 전에 변수를 사용할 때 생성됩니다. 새 프로젝트의 기본값은 활성화되어 있습니다.
ID: 42104, 42030
사용되지 않는 지역 변수 경고
지역 변수가 선언되었지만 참조되지 않을 때 생성됩니다. 기본 설정이 켜져 있습니다.
ID: 42024
인스턴스 변수 경고를 통해 공유 멤버 액세스
인스턴스를 통해 공유 멤버에 액세스할 때 생성되는 부작용이 있거나 인스턴스 변수를 통해 공유 멤버에 액세스하는 경우 식의 오른쪽이 아니거나 매개 변수로 전달됩니다. 새 프로젝트의 기본값은 활성화되어 있습니다.
ID: 42025
재귀적 연산자 또는 속성 액세스 경고
루틴의 본문이 정의된 것과 동일한 연산자 또는 속성을 사용할 때 생성됩니다. 새 프로젝트의 기본값은 켜져 있습니다.
ID: 42004(연산자), 42026(속성)
반환 값 경고가 없는 함수 또는 연산자
함수 또는 연산자에 반환 값이 지정되지 않은 경우 생성됩니다. 여기에는 함수와 이름이 같은 암시적 지역 변수에 대한 Set
생략하는 것이 포함됩니다. 새 프로젝트의 기본값은 활성화되어 있습니다.
ID: 42105(함수), 42016(연산자)
모듈 경고에 사용되는 오버로드 한정자
Overloads
가 Module
에서 사용될 경우 생성됩니다. 새 프로젝트의 기본값은 켜짐입니다.
ID: 42028
중복 또는 겹치는 catch 블록 경고
다른 정의된 Catch
블록과의 관계 때문에 Catch
블록에 도달하지 않을 때 생성됩니다. 새 프로젝트의 기본 설정은 켜져 있습니다.
ID: 42029, 42031
관련 콘텐츠
- 오류 유형
- 사용해 보세요... 잡기... Finally 문
- /nowarn
- /warnaserror(Visual Basic)
- 컴파일 페이지, 프로젝트 디자이너(Visual Basic)
- 기본적으로 꺼져 있는 컴파일러 경고