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

/Clr을 사용 하 여 컴파일된 프로그램으로 메타 데이터를 가져옵니다.Imports metadata into a program compiled with /clr.

SyntaxSyntax

*#using***file [ as_friend ]#using file [as_friend]

매개 변수Parameters

파일과file
MSIL (Microsoft 중간 언어) .dll , .exe , .netmodule 또는 .obj 파일입니다.A Microsoft intermediate language (MSIL) .dll, .exe, .netmodule, or .obj file. 예를 들면 다음과 같습니다.For example,

#using <MyComponent.dll>

as_friend
파일 의 모든 형식에 액세스할 수 있도록 지정 합니다.Specifies that all types in file are accessible. 자세한 내용은 Friend 어셈블리 (c + +)를 참조 하세요.For more information, see Friend Assemblies (C++).

설명Remarks

파일 은 관리 되는 데이터 및 관리 되는 구문에 대해 가져오는 MSIL (Microsoft 중간 언어) 파일 일 수 있습니다.file can be a Microsoft intermediate language (MSIL) file that you import for its managed data and managed constructs. DLL에 어셈블리 매니페스트가 포함 되어 있으면 매니페스트에서 참조 하는 모든 Dll을 가져옵니다.If a DLL contains an assembly manifest, then all the DLLs referenced in the manifest are imported. 빌드 중인 어셈블리는 메타 데이터의 파일 을 어셈블리 참조로 나열 합니다.The assembly you're building will list file in the metadata as an assembly reference.

아마도 파일 에 어셈블리가 없고 (파일 은 모듈) 현재 (어셈블리) 응용 프로그램의 모듈에서 형식 정보를 사용 하지 않으려는 경우가 있습니다.Perhaps file doesn't contain an assembly (file is a module), and you don't intend to use type information from the module in the current (assembly) application. /ASSEMBLYMODULE를 사용 하 여 모듈이 어셈블리의 일부 임을 나타낼 수 있습니다.You may indicate the module is part of the assembly by using /ASSEMBLYMODULE. 그러면 어셈블리를 참조하는 모든 애플리케이션에서 모듈의 형식을 사용할 수 있습니다.The types in the module would then be available to any application that referenced the assembly.

사용할 수 있는 대안은 #using /fu 컴파일러 옵션입니다.An alternative to use #using is the /FU compiler option.

에 전달 된 .exe 어셈블리는 #using .Net Visual Studio 컴파일러 (예: Visual Basic 또는 Visual c #) 중 하나를 사용 하 여 컴파일해야 합니다..exe assemblies passed to #using should be compiled by using one of the .NET Visual Studio compilers (Visual Basic or Visual C#, for example). 로 컴파일된 .exe 어셈블리에서 메타 데이터를 가져오려고 /clr 하면 파일 로드 예외가 발생 합니다.Attempting to import metadata from an .exe assembly compiled with /clr will result in a file load exception.

참고

로 참조 되는 구성 요소는 #using 컴파일 시간에 가져온 다른 버전의 파일을 사용 하 여 실행할 수 있으므로 클라이언트 응용 프로그램에서 예기치 않은 결과가 발생 합니다.A component that is referenced with #using can be run with a different version of the file imported at compile time, causing a client application to give unexpected results.

컴파일러가 모듈이 아니라 어셈블리의 형식을 인식할 수 있도록 하려면 해당 형식을 강제로 확인 해야 합니다.In order for the compiler to recognize a type in an assembly (not a module), it needs to be forced to resolve the type. 예를 들어 형식의 인스턴스를 정의 하 여 강제로 적용할 수 있습니다.You can force it, for example, by defining an instance of the type. 컴파일러에 대 한 어셈블리의 형식 이름을 확인 하는 다른 방법이 있습니다.There are other ways to resolve type names in an assembly for the compiler. 예를 들어 어셈블리의 형식에서 상속 하는 경우 형식 이름이 컴파일러에 알려집니다.For example, if you inherit from a type in an assembly, the type name becomes known to the compiler.

사용 되는 소스 코드에서 빌드된 메타 데이터 __declspec(thread) 를 가져올 때 스레드 의미 체계가 메타 데이터에 유지 되지 않습니다.When importing metadata built from source code that used __declspec(thread), the thread semantics aren't persisted in metadata. 예를 들어,를 사용 하 여 선언 된 변수는 __declspec(thread) .NET Framework 공용 언어 런타임으로 빌드된 다음를 통해 가져온 프로그램에서 컴파일되어 #using __declspec(thread) 변수에 대 한 의미 체계를 갖지 않습니다.For example, a variable declared with __declspec(thread), compiled in a program that is built for the .NET Framework common language runtime, and then imported via #using, won't have __declspec(thread) semantics on the variable.

에서 참조 하는 파일에서 가져온 모든 형식 (관리 및 네이티브) #using 을 사용할 수 있지만 컴파일러는 네이티브 형식을 정의가 아닌 선언으로 처리 합니다.All imported types (both managed and native) in a file referenced by #using are available, but the compiler treats native types as declarations, not definitions.

mscorlib.dll는를 사용 하 여 컴파일할 때 자동으로 참조 됩니다 /clr .mscorlib.dll is automatically referenced when compiling with /clr.

LIBPATH 환경 변수는 컴파일러가에 전달 된 파일 이름을 확인 하는 경우 검색할 디렉터리를 지정 합니다 #using .The LIBPATH environment variable specifies the directories to search when the compiler resolves file names passed to #using.

컴파일러는 다음 경로를 따라 참조를 검색 합니다.The compiler searches for references along the following path:

  • 문에 지정 된 경로 #using 입니다.A path specified in the #using statement.

  • 현재 디렉터리The current directory.

  • .NET Framework 시스템 디렉터리The .NET Framework system directory.

  • 컴파일러 옵션을 사용 하 여 디렉터리를 추가 했습니다 /AI .Directories added with the /AI compiler option.

  • LIBPATH 환경 변수의 디렉터리Directories on LIBPATH environment variable.

예제Examples

다른 어셈블리를 참조 하는 두 번째 어셈블리를 참조 하는 어셈블리를 빌드할 수 있습니다.You can build an assembly that references a second assembly that itself references a third assembly. 해당 형식 중 하나를 명시적으로 사용 하는 경우 첫 번째 어셈블리에서 세 번째 어셈블리를 명시적으로 참조 하기만 하면 됩니다.You only have to explicitly reference the third assembly from the first one if you explicitly use one of its types.

// using_assembly_A.cpp
// compile with: /clr /LD
public ref class A {};
// 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 에 정의 된 형식을 사용 하지 않기 때문에 using_assembly_A.dll 참조에 대 한 오류를 보고 하지 않습니다.In the following sample, there's the compiler doesn't report an error about referencing using_assembly_A.dll, because the program doesn't use any of the types defined in using_assembly_A.cpp.

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

참고 항목See also

전처리기 지시문Preprocessor directives