컴파일러 오류 CS0246
업데이트: 2008년 7월
오류 메시지
'type/namespace' 형식 또는 네임스페이스를 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하십시오.
The type or namespace name 'type/namespace' could not be found (are you missing a using directive or an assembly reference?)
형식을 찾을 수 없습니다. 형식을 포함하고 있는 어셈블리 참조(/reference)가 빠지지 않았는지 또는 using 지시문에서 형식의 사용이 올바로 한정되지 않았는지 확인하십시오.
이 오류의 원인은 다음과 같습니다.
대/소문자가 구분되지 않은 것을 포함하여 사용하려는 형식 이름 또는 네임스페이스 이름의 철자가 잘못되었을 수 있습니다. 올바른 이름을 사용하지 않으면 코드에서 참조하는 형식 또는 네임스페이스의 정의를 컴파일러가 찾을 수 없습니다. C#은 대/소문자를 구분하는데, 형식을 참조할 때 올바른 대/소문자 규칙이 사용되지 않기 때문에 이런 경우가 종종 발생합니다. 예를 들어, Dataset ds;를 사용하면 CS0246 오류가 발생하는데, Dataset의 s가 대문자가 아니기 때문입니다.
오류의 원인이 네임스페이스 이름인 경우, 네임스페이스를 포함하는 어셈블리를 참조하지 않았을 수 있습니다(/reference). 예를 들어, 코드에 using Accessibility;가 있는데 프로젝트에서 Accessibility.dll 어셈블리를 참조하지 않으면 CS0246 오류가 발생합니다. 개발 환경에서 참조를 추가하는 방법에 대한 정보를 보려면 참조 추가 대화 상자를 참조하십시오.
오류의 원인이 형식 이름인 경우, 올바른 using 지시문을 사용하지 않았거나 형식의 이름을 정규화하지 않았을 수 있습니다. DataSet ds; 코드 줄을 살펴보십시오. DataSet 형식을 사용하려면 첫째, DataSet 형식에 대한 정의를 포함하는 어셈블링에 대한 참조가 필요합니다. 둘째, DataSet이 있는 네임스페이스에 대한 using 지시문이 필요합니다. 예를 들어, DataSet이 System.Data 네임스페이스에 있다면 코드를 시작할 때 using System.Data; 문이 있어야 합니다.
2단계는 필요 없지만 이 단계를 생략하면 DataSet을 참조할 때 DataSet 형식을 완전히 한정해야 합니다. DataSet을 완전히 한정한다는 것은 코드에서 DataSet을 참조할 때마다 해당 네임스페이스와 형식을 사용한다는 것을 의미합니다. 따라서 2단계를 생략한다면 위의 선언 코드를 System.Data.DataSet ds;로 바꿔야 합니다.
형식이 아니어서 오류가 발생했다면 이는 형식이 필요한 곳에 변수 등을 사용한 것이 원인일 수 있습니다. 예를 들어, is 문에서 실제 형식 대신 Type 개체를 사용하면 이 오류가 발생합니다.
using 별칭 지시문을 사용하는 경우에 정규화된 형식 이름을 제공하지 않으면 이 오류가 발생합니다. using 별칭 지시문은 소스 코드 파일에서 다른 using 지시문을 사용하여 형식을 확인하지 않습니다. 예를 들어 다음 코드에서는 System.Collections.Generic에 대한 using 지시문이 있을지라도 형식 List<int>가 정규화되지 않았으므로 CS0246이 발생합니다.
using System.Collections.Generic; // Generates CS0246: using myAliasName = List<int>; // Does not generate an error: using myAliasName2 = System.Collections.Generic.List<int>
다음 샘플에서는 CS0246 오류가 발생하는 경우를 보여 줍니다.
// CS0246.cs
// using System.Diagnostics;
public class MyClass
{
[Conditional("A")] // CS0246, uncomment using directive to resolve
public void Test()
{
}
public static void Main()
{
}
}
실제 형식이 필요한 곳에 Type 형식의 개체를 사용한 경우의 예제는 다음과 같습니다(위의 사례 4).
// CS0246b.cs
using System;
class C
{
public bool supports(object o, Type t)
{
if (o is t) // CS0246 – t is not a type
{
return true;
}
return false;
}
public static void Main()
{
}
}
변경 기록
날짜 |
변경 내용 |
이유 |
---|---|---|
2008년 7월 |
오류의 가능한 원인이 추가되었습니다. |
향상된 기능 관련 정보 |