Share via


컴파일러 오류 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월

오류의 가능한 원인이 추가되었습니다.

향상된 기능 관련 정보