#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();
}