#using — dyrektywa (C++/CLI)#using directive (C++/CLI)

Importuje metadane do programu skompilowanego z /CLR.Imports metadata into a program compiled with /clr.

SkładniaSyntax

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

ParametryParameters

rozszerzeniemfile
Język pośredni (MSIL) firmy Microsoft .dll , .exe , .netmodule lub .obj plik.A Microsoft intermediate language (MSIL) .dll, .exe, .netmodule, or .obj file. Przykład:For example,

#using <MyComponent.dll>

as_friend
Określa, że wszystkie typy w pliku są dostępne.Specifies that all types in file are accessible. Aby uzyskać więcej informacji, zobacz zaprzyjaźnione zestawy (C++).For more information, see Friend Assemblies (C++).

UwagiRemarks

plik może być plikiem języka pośredniego firmy Microsoft (MSIL), który można zaimportować do zarządzanych i zarządzanych konstrukcji.file can be a Microsoft intermediate language (MSIL) file that you import for its managed data and managed constructs. Jeśli biblioteka DLL zawiera manifest zestawu, zostaną zaimportowane wszystkie biblioteki DLL, do których odwołuje się manifest.If a DLL contains an assembly manifest, then all the DLLs referenced in the manifest are imported. Kompilowany zestaw będzie zawierać listę plików w metadanych jako odwołanie do zestawu.The assembly you're building will list file in the metadata as an assembly reference.

Prawdopodobnie plik nie zawiera zestawu (plik jest moduł) i nie zamierzasz używać informacji o typie z modułu w bieżącej aplikacji (zestawu).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. Może wskazywać, że moduł jest częścią zestawu przy użyciu /ASSEMBLYMODULE.You may indicate the module is part of the assembly by using /ASSEMBLYMODULE. Typy w module byłyby dostępne dla każdej aplikacji, która odwołuje się do zestawu.The types in the module would then be available to any application that referenced the assembly.

Alternatywą do użycia #using jest opcja kompilatora /Fu .An alternative to use #using is the /FU compiler option.

zestawy. exe przesłane do #using powinny być kompilowane przy użyciu jednego z kompilatorów programu .NET Visual Studio (na przykład Visual Basic lub 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). Próba zaimportowania metadanych z zestawu. exe skompilowanego za pomocą /clr spowoduje wyjątek ładowania pliku.Attempting to import metadata from an .exe assembly compiled with /clr will result in a file load exception.

Uwaga

Składnik, do którego odwołuje się program, #using może być uruchamiany z inną wersją pliku zaimportowanego w czasie kompilacji, co sprawia, że aplikacja kliencka będzie dawać nieoczekiwane wyniki.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.

Aby kompilator rozpoznał typ w zestawie (a nie w module), należy go wymusić, aby rozpoznać typ.In order for the compiler to recognize a type in an assembly (not a module), it needs to be forced to resolve the type. Można wymusić to na przykład przez zdefiniowanie wystąpienia typu.You can force it, for example, by defining an instance of the type. Istnieją inne sposoby rozwiązywania nazw typów w zestawie dla kompilatora.There are other ways to resolve type names in an assembly for the compiler. Na przykład, jeśli dziedziczysz z typu w zestawie, nazwa typu będzie znana kompilatorowi.For example, if you inherit from a type in an assembly, the type name becomes known to the compiler.

Podczas importowania metadanych utworzonych z kodu źródłowego, który został użyty __declspec(thread) , semantyka wątku nie jest utrwalana w metadanych.When importing metadata built from source code that used __declspec(thread), the thread semantics aren't persisted in metadata. Na przykład zmienna zadeklarowana z __declspec(thread) , skompilowana w programie, który jest skompilowany dla .NET Framework środowiska uruchomieniowego języka wspólnego, a następnie zaimportowana przez #using , nie będzie miała __declspec(thread) semantyki dla zmiennej.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.

Wszystkie importowane typy (zarządzane i natywne) w pliku, do którego istnieje odwołanie #using , są dostępne, ale kompilator traktuje typy natywne jako deklaracje, a nie definicje.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 jest automatycznie przywoływany podczas kompilowania przy użyciu /clr .mscorlib.dll is automatically referenced when compiling with /clr.

Zmienna środowiskowa LIBPATH określa katalogi do przeszukania, gdy kompilator rozpoznaje nazwy plików przesłane do #using .The LIBPATH environment variable specifies the directories to search when the compiler resolves file names passed to #using.

Kompilator wyszukuje odwołania w następującej ścieżce:The compiler searches for references along the following path:

  • Ścieżka określona w #using instrukcji.A path specified in the #using statement.

  • Bieżący katalog.The current directory.

  • Katalog systemowy .NET Framework.The .NET Framework system directory.

  • Katalogi dodane z /AI opcją kompilatora.Directories added with the /AI compiler option.

  • Katalogi w zmiennej środowiskowej LIBPATH.Directories on LIBPATH environment variable.

PrzykładyExamples

Można skompilować zestaw, który odwołuje się do drugiego zestawu, który odwołuje się do trzeciego zestawu.You can build an assembly that references a second assembly that itself references a third assembly. Musisz tylko jawnie odwoływać się do trzeciego zestawu z pierwszego, jeśli jawnie używasz jednego z jego typów.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() {}
};

W poniższym przykładzie kompilator nie raportuje błędu dotyczącego odwoływania using_assembly_A.dll, ponieważ program nie używa żadnego z typów zdefiniowanych w using_assembly_A. cpp.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();
}

Zobacz teżSee also

Dyrektywy preprocesoraPreprocessor directives