#using 지시문(C++/CLI)

/clr로 컴파일된 프로그램으로 메타데이터를 가져옵니다.

구문

#using파일 [as_friend]

매개 변수

file
MSIL(Microsoft Intermediate Language) .dll, .exe, .netmodule또는 .obj 파일입니다. 예를 들면 다음과 같습니다.

#using <MyComponent.dll>

as_friend
파일의 모든 형식에 액세스할 수 있도록 지정합니다. 자세한 내용은 Friend 어셈블리(C++)를 참조하세요.

설명

파일 은 관리되는 데이터 및 관리되는 구문에 대해 가져오는 MSIL(Microsoft Intermediate Language) 파일일 수 있습니다. DLL에 어셈블리 매니페스트가 포함된 경우 매니페스트에서 참조되는 모든 DLL을 가져옵니다. 빌드하는 어셈블리는 메타데이터의 파일을 어셈블리 참조로 나열합니다.

파일에 어셈블리(파일이 모듈임)가 포함되어 있지 않으며 현재(어셈블리) 애플리케이션에서 모듈의 형식 정보를 사용하지 않을 수 있습니다. /ASSEMBLYMODULE을 사용하여 모듈이 어셈블리의 일부임을 나타낼 수 있습니다. 그러면 어셈블리를 참조하는 모든 애플리케이션에서 모듈의 형식을 사용할 수 있습니다.

사용할 #using 대안은 /FU 컴파일러 옵션입니다.

전달된 #using .exe 어셈블리는 .NET Visual Studio 컴파일러(예: Visual Basic 또는 Visual C#) 중 하나를 사용하여 컴파일해야 합니다. /clr를 사용하여 컴파일된 .exe 어셈블리에서 메타데이터를 가져오면 파일 로드 예외가 발생합니다.

참고 항목

참조 #using 되는 구성 요소는 컴파일 시간에 가져온 파일의 다른 버전으로 실행할 수 있으므로 클라이언트 애플리케이션에서 예기치 않은 결과를 제공할 수 있습니다.

컴파일러가 모듈이 아닌 어셈블리의 형식을 인식하려면 강제로 형식을 확인해야 합니다. 예를 들어 형식의 인스턴스를 정의하여 강제로 적용할 수 있습니다. 컴파일러의 어셈블리에서 형식 이름을 확인하는 다른 방법이 있습니다. 예를 들어 어셈블리의 형식에서 상속하는 경우 형식 이름은 컴파일러에 알려집니다.

사용된 __declspec(thread)소스 코드에서 빌드된 메타데이터를 가져올 때 스레드 의미 체계는 메타데이터에 유지되지 않습니다. 예를 들어 .NET Framework 공용 언어 런타임용으로 __declspec(thread)빌드된 프로그램에서 컴파일된 다음 이를 통해 #using가져온 변수로 선언된 변수에는 __declspec(thread) 변수에 대한 의미 체계가 없습니다.

참조 #using 되는 파일에서 가져온 모든 형식(관리 및 네이티브)을 사용할 수 있지만 컴파일러는 네이티브 형식을 정의가 아닌 선언으로 처리합니다.

/clr을 사용하여 컴파일하는 경우 mscorlib.dll은 자동으로 참조됩니다.

LIBPATH 환경 변수는 컴파일러가 전달된 파일 이름을 확인할 때 검색할 #using디렉터리를 지정합니다.

컴파일러는 다음 경로를 따라 참조를 검색합니다.

  • 문에 지정된 경로입니다 #using .

  • 현재 디렉터리입니다.

  • .NET Framework 시스템 디렉터리

  • 컴파일러 옵션과 함께 추가된 /AI 디렉터리입니다.

  • LIBPATH 환경 변수의 디렉터리

예제

자체에서 세 번째 어셈블리를 참조하는 두 번째 어셈블리를 참조하는 어셈블리를 빌드할 수 있습니다. 해당 형식 중 하나를 명시적으로 사용하는 경우에만 첫 번째 어셈블리에서 세 번째 어셈블리를 명시적으로 참조해야 합니다.

원본 파일 using_assembly_A.cpp:

// using_assembly_A.cpp
// compile with: /clr /LD
public ref class A {};

원본 파일 using_assembly_B.cpp:

// using_assembly_B.cpp
// compile with: /clr /LD
#using "using_assembly_A.dll"
public ref class B {
public:
   void Test(A a) {}
   void Test() {}
};

다음 샘플에서는 프로그램에서 using_assembly_A.cpp에 정의된 형식을 사용하지 않으므로 컴파일러가 using_assembly_A.dll 참조에 대한 오류를 보고하지 않습니다.

// using_assembly_C.cpp
// compile with: /clr
#using "using_assembly_B.dll"
int main() {
   B b;
   b.Test();
}

참고 항목

전처리기 지시문