이 문서에서는 다음과 같은 컴파일러 오류를 다룹니다.
- CS0104: 오류: 'reference'는 'identifier'와 'identifier' 사이의 모호한 참조입니다.
- CS0116: 오류: 네임스페이스는 필드, 메서드 또는 문과 같은 멤버를 직접 포함할 수 없습니다.
- CS0138: 오류: using 네임스페이스 지시문은 네임스페이스에만 적용할 수 있습니다. 'type'은 네임스페이스가 아닌 형식입니다.
- CS0430: 오류: 외설 별칭 '별칭'이 /reference 옵션에 지정되지 않았습니다.
-
CS0431: 오류:
::를 참조하는 별칭 '식별자'를 사용할 수 없습니다. 해당 별칭이 유형을 참조하므로.을(를) 대신 사용하십시오. - CS0432: 오류: 별칭 '식별자'를 찾을 수 없습니다.
- CS0434: 오류: NamespaceName2의 네임스페이스 NamespaceName1이 NamespaceName3의 TypeName1 형식과 충돌합니다.
- CS0438: 오류: 'module_1'의 'type' 형식이 'module_2'의 네임스페이스 '네임스페이스'와 충돌합니다.
- CS0439: 오류: extern 별칭 선언은 네임스페이스에 정의된 다른 모든 요소보다 우선해야 합니다.
- CS0518: 오류: 미리 정의된 형식 'type'이 정의되거나 가져오지 않았습니다.
- CS0576: 오류: 네임스페이스 '네임스페이스'에는 별칭 'identifier'와 충돌하는 정의가 포함되어 있습니다.
-
CS0687: 오류: 네임스페이스 별칭 한정자
::(은)는 항상 형식 또는 네임스페이스로 확인되므로 여기서는 불법입니다. 대신.을(를) 사용하는 것이 좋습니다. - CS1022: 오류: 형식 또는 네임스페이스 정의 또는 파일의 끝이 필요합니다.
- CS1529: 오류: 사용 선언은 외부 별칭 선언을 제외한 네임스페이스에 정의된 모든 다른 요소보다 먼저 와야 합니다.
- CS1537: 오류: 사용 별칭 '별칭'이 이 네임스페이스에 이전에 나타났습니다.
- CS1671: 오류: 네임스페이스 선언에는 한정자 또는 특성이 있을 수 없습니다.
- CS1679: 오류: '/reference'에 대한 잘못된 extern 별칭입니다. 'identifier'는 유효한 식별자가 아닙니다.
- CS1680: 오류: 잘못된 참조 별칭 옵션: 'alias=' -- 파일 이름이 없습니다.
- CS1681: 오류: 전역 extern 별칭을 다시 정의할 수 없습니다.
- CS1730: 오류: 어셈블리 및 모듈 특성은 절 및 extern 별칭 선언을 사용하는 것을 제외하고 파일에 정의된 다른 모든 요소보다 우선해야 합니다.
- CS2034: 오류: extern 별칭을 선언하는 /reference 옵션은 하나의 파일 이름만 가질 수 있습니다. 여러 별칭 또는 파일 이름을 지정하려면 여러 /reference 옵션을 사용합니다.
- CS7000: 오류: 별칭이 지정된 이름을 예기치 않게 사용했습니다.
-
CS7007: 오류: 지시문은
using static형식에만 적용할 수 있습니다. 대신 지시문을using namespace고려합니다. - CS7015: 오류: 이 컨텍스트에서는 'extern 별칭'이 잘못되었습니다.
- CS7021: 오류: 스크립트 코드에서 네임스페이스를 선언할 수 없습니다.
- CS8083: 오류: 별칭으로 한정된 이름이 식이 아닙니다.
- CS8085: 오류: 'using static' 지시문을 사용하여 별칭을 선언할 수 없습니다.
- CS8914: 오류: 전역 using 지시문을 네임스페이스 선언에 사용할 수 없습니다.
- CS8915: 오류: 전역 using 지시문은 전역이 아닌 모든 using 지시문 앞에 있어야 합니다.
- CS8954: 오류: 원본 파일에는 파일 범위 네임스페이스 선언이 하나만 포함될 수 있습니다.
- CS8955: 오류: 원본 파일에 파일 범위 및 일반 네임스페이스 선언을 모두 포함할 수 없습니다.
- CS8956: 오류: 파일 범위 네임스페이스는 파일의 다른 모든 멤버보다 우선해야 합니다.
-
CS9130: 오류: 별칭 사용은
ref형식일 수 없습니다. -
CS9131: 오류: 사용 별칭만
unsafe수 있습니다. - CS9132: 오류: 별칭을 사용하는 것은 nullable 참조 형식일 수 없습니다.
-
CS9133: 오류:
static한정자는unsafe한정자 앞에 있어야 합니다. - CS9162: 형식은 '정적 사용'에 유효하지 않습니다. 클래스, 구조체, 인터페이스, 열거형, 대리자 또는 네임스페이스만 사용할 수 있습니다.
그리고 다음 컴파일러 경고:
- CS0105: 경고: '네임스페이스'에 대한 using 지시문이 이 네임스페이스에 이전에 나타났습니다.
- CS0435: 경고: 'assembly'의 네임스페이스 'namespace'가 'assembly'에서 가져온 형식 'type'과 충돌합니다. 'assembly'에 정의된 네임스페이스 사용
- CS0436: 경고: 'assembly'의 'type' 형식이 'assembly'에서 가져온 형식 'type2'와 충돌합니다. 'assembly'에 정의된 형식 사용
- CS0437: 경고: 'assembly2'의 'type' 형식이 'assembly1'에서 가져온 네임스페이스 '네임스페이스'와 충돌합니다. 'assembly'에 정의된 형식 사용
-
CS0440: 경고:
global항상 별칭이 아닌 전역 네임스페이스를 참조하기 때문에global::(으)로 명명된 별칭을 정의하는 것은 좋지 않습니다. - CS8019: 정보: 지시문을 사용할 필요가 없습니다.
- CS8020: 정보: 사용되지 않는 extern 별칭입니다.
- CS8933: 정보: using 지시문은 이전에 전역 using으로 나타났습니다.
이러한 오류 및 경고는 using 지시문, 네임스페이스 선언, 또는 형식과 네임스페이스 간의 명명 충돌 문제를 나타냅니다. 다음 섹션에서는 이러한 오류와 오류를 수정하는 방법을 설명합니다.
사용 지시문
다음 오류는 using 지시문과 관련이 있습니다.
- CS0105: '네임스페이스'에 대한 using 지시문이 이 네임스페이스에 이전에 나타났습니다.
- CS0430: 외부 별칭 'alias'가 /reference 옵션에 지정되지 않았습니다.
- CS0439: extern 별칭 선언은 네임스페이스에 정의된 다른 모든 요소보다 우선해야 합니다.
- CS1529: using 절은 extern 별칭 선언을 제외하고 네임스페이스에 정의된 다른 모든 요소보다 우선해야 합니다.
- CS1679: '/reference'에 대한 잘못된 extern 별칭입니다. 'identifier'는 유효한 식별자가 아닙니다.
- CS1680: 'alias=' 참조 별칭 옵션이 잘못되었습니다. 파일 이름이 없습니다.
- CS1681: 전역 extern 별칭을 다시 정의할 수 없습니다.
- CS1730: 어셈블리 및 모듈 특성은 절 및 extern 별칭 선언을 사용하는 것을 제외하고 파일에 정의된 다른 모든 요소보다 우선해야 합니다.
- CS2034: extern 별칭을 선언하는 /reference 옵션은 하나의 파일 이름만 가질 수 있습니다. 여러 별칭 또는 파일 이름을 지정하려면 여러 /reference 옵션을 사용합니다.
- CS7015: 이 컨텍스트에서는 'extern 별칭'이 유효하지 않습니다.
- CS8019: 지시문을 사용할 필요가 없습니다.
- CS8020: 사용되지 않는 extern 별칭입니다.
- CS8933: using 지시문은 이전에 전역 using으로 사용되었습니다.
이러한 진단을 제어하는 규칙에 대한 using 지시문 및 extern 별칭 언어 참조를 참조하세요. 잠재적인 수정 사항은 다음과 같습니다.
- 모든
using지시문을 파일의 맨 위 또는 네임스페이스 선언의 맨 위로 이동합니다. C# 언어를 사용하려면 네임스페이스의using다른 요소 앞에 지시문이 있어야 합니다(CS1529). -
extern alias선언을 모두using지시문보다 앞에 위치시킵니다. 언어에서는 외부 별칭이 모든 요소, 특히, 지시문( CS0439 ,CS7015 ) 앞에 와야 합니다. - 절 및 선언 뒤
using의 모든 어셈블리 및extern alias모듈 수준 특성을 모든 형식 선언 앞에 이동합니다. 특성은 디렉티브 뒤에 와야 하지만, 형식보다는 앞에 있어야 합니다(CS1730). - 소스 코드의 모든
extern alias선언에 프로젝트의 참조 옵션에 정의된 해당 별칭이 있는지 확인합니다. 컴파일러는 지정되지 않은 별칭(CS0430)을 확인할 수 없습니다. - 단일 옵션에서 여러 별칭을 결합하는 대신 각 외래 별칭에 대해 별도의
/reference옵션을 사용합니다. 컴파일러에는 참조당 하나의 별칭 옵션(CS2034)이 필요합니다. -
/reference옵션에서 별칭이 유효한 C# 식별자인지 확인하십시오. 별칭은 식별자 명명 규칙(CS1679)을 따라야 합니다. 별칭 참조 옵션에서=기호 뒤에 파일 이름을 포함하십시오. 컴파일러는 별칭이 참조하는 어셈블리(CS1680)를 알아야 합니다. -
globalextern 별칭을 다시 정의하지 마십시오.global는 모든 비보정 참조(CS1681)를 참조하는 미리 정의된 별칭입니다. - 중복
using지시문을 제거합니다. 컴파일러는 동일한 네임스페이스를 여러 번 가져올 때 경고합니다(CS0105, CS8019, CS8933). - 사용하지 않는
extern alias선언을 제거합니다. 컴파일러는 extern 별칭이 선언되었지만 코드에서 참조되지 않을 때 진단을 실행합니다(CS8020).
정적 지시문 사용
다음 오류는 using static 지시문과 관련이 있습니다.
- CS0138: using 네임스페이스 지시문은 네임스페이스에만 적용할 수 있습니다. 'type'은 네임스페이스가 아닌 형식입니다.
-
CS7007: 지시문은
using static형식에만 적용할 수 있습니다. 대신 지시문을using namespace고려합니다. -
CS9133:
static한정자는unsafe한정자보다 앞에 있어야 합니다. - CS9162: 형식이 '정적 사용'에 적합하지 않습니다. 클래스, 구조체, 인터페이스, 열거형, 대리자 또는 네임스페이스만 사용할 수 있습니다.
이러한 진단을 제어하는 규칙은 using static directive 언어 참조에서 확인하세요. 잠재적인 수정 사항은 다음과 같습니다.
- 형식의
static멤버를 직접 가져올 때 한정자를 추가합니다. 생략static하면 형식(CS0138)이 아닌 네임스페이스를 가져오고 있다고 컴파일러에 알릴 수 있기 때문입니다. - 네임스페이스
static를 가져올 때는static수정자를 제거하십시오.using static은(는) 네임스페이스가 아니라 형식에만 적용될 수 있습니다(CS7007). 다른 형식이 정적 가져오기에 유효한 대상이 아니기 때문에 지시문의using static대상이 클래스, 구조체, 인터페이스, 열거형 또는 대리자인지 확인합니다(CS9162). - 언어에
static특정 순서의 한정자가 필요하기 때문에 두 가지를 결합할 때 한정자 앞에unsafe한정자를 배치합니다(CS9133).
전역 using 지시자
다음 오류는 global using 지시문과 관련이 있습니다.
- CS8914: 글로벌 using 지시문은 네임스페이스 선언에서 사용할 수 없습니다.
- CS8915: 전역 using 지시문은 모든 비전역 using 지시문보다 먼저 와야 합니다.
이러한 진단을 제어하는 규칙에 대해 알고 싶다면 전역 using 지시문 언어 참조문서를 확인하세요. 잠재적인 수정 사항은 다음과 같습니다.
- 전역 사용은 프로젝트 전체에 적용되고 네임스페이스(
global using)로 범위를 지정할 수 없으므로 네임스페이스 선언 외부의 지시문을 파일 범위로 이동합니다. - 언어에 로컬 지시문(
global using) 앞에 전역 지시문이 필요하기 때문에 모든using지시문을 파일의 모든 비 전역 지시문 앞에 배치합니다. - 지시문은
static global using파일-로컬 형식을 참조할 수 없습니다.
파일 범위 네임스페이스
다음 오류는 파일 범위 네임스페이스와 관련이 있습니다.
- CS8954: 원본 파일에는 파일 범위 네임스페이스 선언이 하나만 포함될 수 있습니다.
- CS8955: 원본 파일에는 파일 범위와 일반 네임스페이스 선언을 모두 포함할 수 없습니다.
- CS8956: 파일 범위 네임스페이스는 파일의 다른 모든 멤버보다 우선해야 합니다.
이러한 진단을 제어하는 규칙에 대한 파일 범위 네임스페이스 언어 참조를 참조하세요. 잠재적인 수정 사항은 다음과 같습니다.
- 언어에서는 파일 범위 네임스페이스 하나만 파일의 모든 형식에 대한 네임스페이스를 설정할 수 있으므로 파일당 하나의 파일 범위 네임스페이스 선언만 사용합니다(CS8954).
- 언어에서 두 스타일(CS8955)을 혼합할 수 없으므로 단일 파일 내에서 파일 범위 또는 블록 범위 네임스페이스 선언을 선택합니다.
- 형식이 선언되기 전에 네임스페이스를 설정해야 하므로 파일 범위 네임스페이스 선언을 형식 선언 앞에 이동합니다(CS8956).
별칭 한정자
다음 오류는 별칭 한정자와 관련이 있습니다.
-
CS0431: 별칭이 형식을 참조하기 때문에 'identifier'
::별칭을 사용할 수 없습니다. 대신.를 사용하십시오. - CS0432: 별명 "식별자"를 찾을 수 없습니다.
-
CS0440: 명명
global된 별칭을 정의하는 것은 항상 별칭이 아닌 전역 네임스페이스를 참조하기 때문에global::권장되지 않습니다. -
CS0687: 네임스페이스 별칭 한정자
::는 항상 형식 또는 네임스페이스로 해석되므로 여기서는 허용되지 않습니다. 대신.을(를) 사용해 보세요. - CS7000: 별칭이 지정된 이름을 예기치 않게 사용했습니다.
- CS8083: 별칭으로 한정된 이름은 식이 아닙니다.
이러한 진단을 제어하는 규칙에 대한 네임스페이스 별칭 한정 자 언어 참조를 참조하세요. 잠재적인 수정 사항은 다음과 같습니다.
-
::연산자를.연산자로 변경하여 형식 별칭의 멤버에 액세스하십시오.::한정자는 네임스페이스 별칭에만 유효하며, 이는 형식 별칭에서는 유효하지 않습니다 (CS0431, CS0687 참조). - 컴파일러가 정의되지 않은 별칭(CS0432)을 확인할 수 없으므로 참조하는 별칭이 directive
using또는extern alias으로 선언되었는지 확인하세요. - 별칭 정규화된 이름은 식으로 유효하지 않으므로 형식 또는 네임스페이스 이름이 필요한 컨텍스트에서만 별칭 한정자를 사용합니다(CS7000, CS8083).
- 별칭으로 사용할 다른 이름을 선택하세요.
global은 전역 네임스페이스를 참조하도록 예약되어 있으며, 다시 정의할 수 없습니다(CS0440).
별칭 제한 사용
다음 오류는 별칭 사용에 대한 제한 사항과 관련이 있습니다.
- CS0576: 네임스페이스 'namespace'에는 별칭 'identifier'와 충돌하는 정의가 포함되어 있습니다.
- CS1537: 사용 별칭 '별칭'이 이전에 이 네임스페이스에서 이미 사용되었습니다.
- CS8085: 'using static' 지시문을 사용하여 별칭을 선언할 수 없습니다.
-
CS9130: 별칭은
ref유형이 될 수 없습니다. -
CS9131: 사용 별칭만 사용할
unsafe수 있습니다. - CS9132: 별칭을 사용하는 것은 null 허용 참조 형식일 수 없습니다.
이러한 진단을 규정하는 규칙에 대한 using 별칭 언어 참조를 확인하세요. 잠재적인 수정 사항은 다음과 같습니다.
- 컴파일러에서 별칭과 기존 정의(CS0576)를 구분할 수 없으므로 범위에서 기존 형식 또는 네임스페이스 이름과 충돌하지 않는 별칭의 고유한 이름을 선택합니다.
- 중복 별칭 선언이 모호성을 만들기 때문에 각 별칭 이름은 네임스페이스 내에서 한 번만 사용합니다(CS1537).
- 별칭과 정적 가져오기가 상호 배타적이므로 별칭을 선언할 때
static한정자를 제거하세요. 멤버를 가져오는 데using static를 사용하거나 별칭을 만드는 데using Alias =를 사용해야 하며, 둘을 함께 사용해서는 안 됩니다(CS8085).
C# 12부터 별칭 사용에는 다음과 같은 제한이 적용됩니다.
- using 별칭에서
ref,in,out수정자를 사용하지 마세요. 이러한 매개 변수 수정자는 형식 별칭 컨텍스트(CS9130)에서 유효하지 않기 때문입니다. -
unsafe수식자는 포인터 형식의 별칭이나using static지시문과 함께만 사용해야 하며, 별칭이나 정적 가져오기 없이 사용할 수 없습니다(CS9131). - nullable 참조 형식은 직접 별칭을 지정할 수 없으므로 참조 형식에 대한 별칭을 만들 때 null을 허용하지 않는 참조 형식을 사용합니다(CS9132).
네임스페이스 선언
다음 오류는 네임스페이스 선언 규칙과 관련이 있습니다.
- CS0116: 네임스페이스는 필드, 메서드 또는 문과 같은 멤버를 직접 포함할 수 없습니다.
- CS1022: 형식 또는 네임스페이스 정의가 필요하거나 파일의 끝이 예상됩니다.
- CS1671: 네임스페이스 선언에는 한정자 또는 특성이 있을 수 없습니다.
- CS7021: 스크립트 코드에서 네임스페이스를 선언할 수 없습니다.
이러한 진단을 제어하는 규칙은 네임스페이스 키워드 및 C# 프로그램 언어 참조의 일반 구조를 참조하세요. 잠재적인 수정 사항은 다음과 같습니다.
- 네임스페이스는 형식 선언, 중첩 네임스페이스 및 지시문(
using)만 포함할 수 있으므로 네임스페이스 내부가 아닌 형식(클래스, 구조체, 레코드 또는 인터페이스) 내에서 모든 메서드, 필드 및 속성이 선언되었는지 확인합니다. - 원본 파일에서 일치하지 않는 중괄호를 확인하세요. 네임스페이스 또는 형식 정의 후에 추가된 닫는 중괄호가 있는 경우, 파일 끝에서 컴파일러가 예기치 않은 콘텐츠를 발견하여 오류(CS1022)를 유발합니다.
- 네임스페이스는 같은
public한정자를 지원하지 않으며 특성은 적용할 수 없으므로 네임스페이스 선언에서 액세스 한정자 또는private특성을 제거합니다(CS1671). - 스크립트 코드는 네임스페이스 선언(
.csx.cs)을 지원하지 않는 단일 실행 컨텍스트에서 평가되므로 네임스페이스 선언을 C# 스크립트 파일()에서 일반 소스 파일()로 이동합니다.
네임스페이스 및 타입 명명 충돌
다음 오류 및 경고는 네임스페이스와 형식 간의 명명 충돌과 관련이 있습니다.
- CS0104: 'reference'는 'identifier'와 'identifier' 사이의 모호한 참조입니다.
- CS0434: NamespaceName2의 네임스페이스 NamespaceName1이 NamespaceName3의 TypeName1 형식과 충돌합니다.
- CS0435: 'assembly'의 네임스페이스 'namespace'가 'assembly'에서 가져온 형식 'type'과 충돌합니다. 'assembly'에 정의된 네임스페이스 사용
- CS0436: 'assembly'의 'type' 형식이 'assembly'에서 가져온 형식 'type2'와 충돌합니다. 'assembly'에 정의된 형식 사용
- CS0437: 'assembly2'의 'type' 형식이 'assembly1'에서 가져온 네임스페이스 '네임스페이스'와 충돌합니다. 'assembly'에 정의된 형식 사용
- CS0438: 'module_1'의 'type' 형식이 'module_2'의 네임스페이스 '네임스페이스'와 충돌합니다.
이러한 진단을 제어하는 규칙에 대한 using 지시문, extern 별칭 및 네임스페이스 별칭 한정자 언어 참조를 참조하세요. 잠재적인 수정 사항은 다음과 같습니다.
- 코드가 여러 가져온 네임스페이스에 존재하는 이름을 참조할 때, 완전한 정규화된 이름 또는 네임스페이스 별칭을 사용합니다.
- 컴파일러는 지시문(
using)에서 가져온 두 개 이상의 네임스페이스에 동일한 이름이 나타날 때 사용할 형식을 확인할 수 없습니다. - 가져온 형식과 가져온 중첩된 네임스페이스가 동일한 정규화된 이름을 공유하는 경우 형식 또는 네임스페이스의 이름을 바꿉니다. 이름이 참조될 때 컴파일러는 둘을 구분할 수 없습니다(CS0434, CS0438).
명명 충돌 경고를 해결하려면 충돌하는 선언 중 하나의 이름을 바꾸거나, 다른 네임스페이스를 사용하거나, 불필요한 어셈블리 참조를 제거하거나, extern 별칭 을 사용하여 두 정의 간을 구분합니다. 컴파일러는 자동으로 충돌을 해결하는데, 로컬로 정의된 네임스페이스가 가져온 형식(CS0435)보다 우선하며, 로컬로 정의된 형식이 가져온 형식(CS0436)보다 우선하고, 로컬로 정의된 형식이 가져온 네임스페이스(CS0437)보다 우선합니다. 그러나 이러한 경고는 해결해야 할 잠재적인 혼동의 원인을 나타냅니다.
미리 정의된 형식 가져오기
다음 오류는 미리 정의된 형식 정의 누락과 관련이 있습니다.
- CS0518: 미리 정의된 형식 'type'이 정의되거나 가져오지 않았습니다.
비고
이 경고는 명시적 빌드 또는 다시빌드 작업 중에만 보고됩니다. IntelliSense 진단의 일부로 IDE에 입력하는 동안 표시되지 않습니다. 즉, 필드를 사용하거나 제거하여 경고를 수정하는 경우 프로젝트를 다시 빌드하거나 다시 빌드할 때까지 경고가 오류 목록에 유지될 수 있습니다.
이 진단을 제어하는 규칙에 대한 NoStandardLib 컴파일러 옵션 언어 참조를 참조하세요.
프로젝트가 올바른 .NET 런타임을 대상으로 하는지 확인합니다. 미리 정의된 형식인 System.Int32와 System.String는 런타임 라이브러리에서 제공됩니다. 올바르지 않거나 누락된 <TargetFramework> 사양으로 인해 컴파일러가 이러한 형식을 찾을 수 없습니다(CS0518). 파일의 속성이 <TargetFramework>.csproj 의도한 런타임(예: net10.0)을 지정하는지 확인합니다. 고유한 네임스페이스를 정의하려는 경우가 아니면 System 컴파일러 옵션을 지정하지 마세요. 이 옵션을 사용하면 미리 정의된 모든 형식(CS0518)을 정의하는 표준 라이브러리를 가져올 수 없습니다. 오류가 계속되면 Visual Studio에서 프로젝트를 다시 로드하거나 obj 및 bin 폴더를 삭제하고 프로젝트를 다시 빌드하거나 .NET 런타임(CS0518)을 다시 설치해 보세요.
.NET