#using ディレクティブ (C +/cli CLI)#using Directive (C++/CLI)

コンパイルされたプログラムにメタデータをインポート/clrします。Imports metadata into a program compiled with /clr.


#using file [as_friend]


MSIL .dll、.exe、.netmodule、または .obj。例えば以下のようにします。An MSIL .dll, .exe, .netmodule, or .obj. For example,

#using <MyComponent.dll>

すべての型にことを指定します。ファイルはアクセスできます。Specifies that all types in file are accessible. 詳細については、次を参照してください。フレンド アセンブリ (C++)します。For more information, see Friend Assemblies (C++).


ファイルマネージ データとマネージ構造のインポートした Microsoft intermediate language (MSIL) ファイルであることができます。file can be a Microsoft intermediate language (MSIL) file that you import for its managed data and managed constructs. ビルドしているアセンブリが一覧表示の .dll ファイルには、アセンブリ マニフェストが含まれていて、マニフェストで参照されているすべての .dll がインポートされる場合ファイルアセンブリ参照としてメタデータ内で。If a .dll file contains an assembly manifest, then all the .dlls referenced in the manifest are imported and the assembly you are building will list file in the metadata as an assembly reference.

場合ファイルアセンブリが含まれていない (場合ファイルモジュール) だけあることを示すオプションがあります (アセンブリ) の現在のアプリケーションで、モジュールから型情報を使用する予定がない場合、モジュールが一部アセンブリです。使用して、 /ASSEMBLYMODULEします。If file does not contain an assembly (if file is a module) and if you do not intend to use type information from the module in the current (assembly) application, you have the option of just indicating that the module is part the assembly; use /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コンパイルする必要があります、Visual Studio の .NET コンパイラ (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). /clr でコンパイルされた .exe アセンブリからメタデータをインポートしようとすると、ファイルの読み込み例外が発生します。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, which you can do, 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 will then become known to the compiler.

使用するソース コードから構築されたメタデータをインポートするときに_declspecスレッドのセマンティクスはメタデータで保持されません。When importing metadata built from source code that used __declspec(thread), the thread semantics are not persisted in metadata. たとえば、変数を使用して宣言 _declspecでは、.NET Framework 共通言語ランタイムのビルドを使用して、インポートするプログラムをコンパイル #usingではなくなります _declspec変数のセマンティクスです。For example, a variable declared with __declspec(thread), compiled in a program that is build for the .NET Framework common language runtime, and then imported via #using, will no longer 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.

/clr でコンパイルするときには、mscorlib.dll が自動的に参照されます。mscorlib.dll is automatically referenced when compiling with /clr.

LIBPATH 環境変数をコンパイラに渡されたファイル名を解決するときに検索されるディレクトリを指定します #usingします。The LIBPATH environment variable specifies the directories that will be searched when the compiler tries to resolve file names passed to #using.

コンパイラは、次のパスに従って参照を検索します。The compiler will search 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.


アセンブリ (C) をビルドし、他のアセンブリ (A) を参照しているアセンブリ (B) を参照する場合、C で A のいずれかの型を明示的に使用するのでない限り、アセンブリ A を明示的に参照する必要はありません。If you build an assembly (C) and reference an assembly (B) that itself references another assembly (A), you will not have to explicitly reference assembly A unless you explicitly use one of A's types in C.

// 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 {
   void Test(A a) {}
   void Test() {}


次の例では、using_assembly_A.cpp で定義されている型をプログラムが使用しないため、using_assembly_A.dll を参照していないことによるコンパイラ エラーは発生しません。In the following sample, there is no compiler error for not referencing using_assembly_A.dll because the program does not 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;

関連項目See also

プリプロセッサ ディレクティブPreprocessor Directives