using-Anweisung (C++/CLI)

Importiert Metadaten in ein Programm, das mit "/clr" kompiliert wurde.

Syntax

#usingDatei [as_friend]

Parameter

datei
Eine Microsoft-Zwischensprache (MSIL) .dll, .exe, , .netmoduleoder .obj Datei. Beispiel:

#using <MyComponent.dll>

as_friend
Gibt an, dass auf alle Typen in der Datei zugegriffen werden kann. Weitere Informationen finden Sie unter Friend Assemblies (C++).

Hinweise

Die Datei kann eine MSIL-Datei (Microsoft Intermediate Language) sein, die Sie für die verwalteten Daten und verwalteten Konstrukte importieren. Wenn eine DLL ein Assemblymanifest enthält, werden alle DLLs, auf die im Manifest verwiesen wird, importiert. Die Assembly, die Sie erstellen, listet die Datei in den Metadaten als Assemblyverweis auf.

Möglicherweise enthält die Datei keine Assembly (Datei ist ein Modul), und Sie beabsichtigen nicht, Typinformationen aus dem Modul in der aktuellen Anwendung (Assembly) zu verwenden. Sie können angeben, dass das Modul Teil der Assembly ist, indem Sie /ASSEMBLYMODULE verwenden. Die Typen im Modul wären dann für jede Anwendung verfügbar, die auf die Assembly verweist.

Eine Alternative zur Verwendung #using ist die /FU-Compileroption .

.exe assemblys, die #using übergeben werden, sollten mithilfe eines der .NET Visual Studio-Compiler (z. B. Visual Basic oder Visual C#) kompiliert werden. Der Versuch, Metadaten von einer EXE-Assembly zu importieren, die mit /clr kompiliert wurde, führt zu einem Ausnahmefehler beim Laden der Datei.

Hinweis

Eine Komponente, auf die verwiesen #using wird, kann zur Kompilierungszeit mit einer anderen Version der datei ausgeführt werden, wodurch eine Clientanwendung unerwartete Ergebnisse liefern kann.

Damit der Compiler einen Typ in einer Assembly (nicht ein Modul) erkennt, muss er gezwungen werden, den Typ aufzulösen. Sie können sie z. B. erzwingen, indem Sie eine Instanz des Typs definieren. Es gibt weitere Möglichkeiten zum Auflösen von Typnamen in einer Assembly für den Compiler. Wenn Sie z. B. von einem Typ in einer Assembly erben, wird der Typname für den Compiler bekannt.

Beim Importieren von Metadaten, die aus dem verwendeten Quellcode erstellt wurden __declspec(thread), werden die Threadsemantik nicht in Metadaten beibehalten. Beispielsweise verfügt eine variable, die mit __declspec(thread), kompiliert in einem Programm deklariert wurde, das für die Common Language Runtime von .NET Framework erstellt und dann über "importiert" #usingwird, keine __declspec(thread) Semantik für die Variable.

Alle importierten Typen (sowohl verwaltete als auch systemeigene) in einer Datei, auf die verwiesen wird #using , sind verfügbar, der Compiler behandelt jedoch systemeigene Typen als Deklarationen, nicht als Definitionen.

Auf "mscorlib.dll" wird automatisch beim Kompilieren mit /clr verwiesen.

Die LIBPATH-Umgebungsvariable gibt die Verzeichnisse an, die durchsucht werden sollen, wenn der Compiler Dateinamen aufgelöst, die an #using.

Der Compiler sucht nach Verweisen entlang des folgenden Pfads:

  • Ein pfad, der in der #using Anweisung angegeben ist.

  • Das aktuelle Verzeichnis.

  • Das .NET Framework-Systemverzeichnis.

  • Verzeichnisse, die mit der /AI Compileroption hinzugefügt wurden.

  • Verzeichnisse der LIBPATH-Umgebungsvariable.

Beispiele

Sie können eine Assembly erstellen, die auf eine zweite Assembly verweist, die selbst auf eine dritte Assembly verweist. Sie müssen nur explizit auf die dritte Assembly aus dem ersten verweisen, wenn Sie explizit einen seiner Typen verwenden.

Quelldatei using_assembly_A.cpp:

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

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

Im folgenden Beispiel meldet der Compiler keinen Fehler beim Verweisen auf using_assembly_A.dll, da das Programm keine der in using_assembly_A.cpp definierten Typen verwendet.

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

Siehe auch

Präprozessoranweisungen