Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Aktiviert oder deaktiviert die Aufteilung des virtuellen Moduls.
Syntax
HRESULT EnableVirtualModuleSplitting(
BOOL enableSplitting
);
Die Parameter
enableSplitting
true um die Aufteilung virtueller Module zu ermöglichen; false um sie zu deaktivieren.
Bemerkungen
Durch die Aufteilung virtueller Module erkennt ICorDebug Module, die während des Buildprozesses zusammengeführt wurden, und stellen sie als Gruppe von separaten Modulen statt als ein einzelnes großes Modul dar. Dadurch wird das Verhalten verschiedener unten beschriebener ICorDebug-Methoden geändert.
Hinweis
Diese Methode ist nur für .NET Native verfügbar.
Diese Methode kann aufgerufen werden und der Wert kann enableSplitting jederzeit geändert werden. Es verursacht keine zustandsbehafteten funktionalen Änderungen in einem ICorDebug-Objekt , außer das Verhalten der methoden zu ändern, die im Abschnitt " Virtual module splitting" und den abschnitt "nicht verwaltete Debugging-APIs " zum Zeitpunkt des Aufrufs aufgeführt sind. Die Verwendung virtueller Module führt beim Aufrufen dieser Methoden zu leistungseinbußen. Darüber hinaus kann es erforderlich sein, die IMetaDataImport-APIs ordnungsgemäß zu implementieren, und diese Caches können beibehalten werden, auch nachdem die aufteilung des virtuellen Moduls deaktiviert wurde.
Terminologie
Die folgenden Begriffe werden beim Beschreiben der Aufteilung virtueller Module verwendet:
Containermodule oder Container Die Aggregatmodule.
Untermodule oder virtuelle Module Die Module in einem Container.
reguläre Module, die zur Erstellungszeit nicht zusammengeführt wurden. Sie sind weder Containermodule noch Untermodule.
Sowohl Containermodule als auch Untermodule werden durch ICorDebugModule Schnittstellenobjekte dargestellt. Das Verhalten der Schnittstelle unterscheidet sich jedoch in jedem Fall geringfügig.
Module und Assemblys
Multimodulassemblys werden für Assemblyzusammenführungsszenarien nicht unterstützt, daher gibt es eine 1:1-Beziehung zwischen einem Modul und einer Assembly. Jedes ICorDebugModule Objekt, unabhängig davon, ob es ein Containermodul oder ein Untermodul darstellt, verfügt über ein entsprechendes ICorDebugAssembly-Objekt. Die ICorDebugModule::GetAssembly-Methode konvertiert von dem Modul in die Assembly. Zum Zuordnen in die andere Richtung zählt die ICorDebugAssembly::EnumerateModules-Methode nur 1 Modul auf. Da Assembly und Modul in diesem Fall ein eng gekoppeltes Paar bilden, werden die Begriffe Assembly und Modul weitgehend austauschbar.
Verhaltensunterschiede
Containermodule weisen die folgenden Verhaltensweisen und Merkmale auf:
Ihre Metadaten für alle Teilmodule werden zusammengeführt.
Ihre Typnamen können gegled sein.
Die ICorDebugModule::GetName-Methode gibt den Pfad zu einem On-Disk-Modul zurück.
Die ICorDebugModule::GetSize-Methode gibt die Größe dieses Bilds zurück.
Die ICorDebugAssembly3.EnumerateContainedAssemblies-Methode listet die Untermodule auf.
Die ICorDebugAssembly3.GetContainerAssembly-Methode gibt zurück
S_FALSE.
Untermodule weisen die folgenden Verhaltensweisen und Merkmale auf:
Sie verfügen über einen reduzierten Satz von Metadaten, die nur der ursprünglichen Assembly entsprechen, die zusammengeführt wurde.
Die Metadatennamen werden nicht verworren.
Metadatentoken sind unwahrscheinlich, dass sie mit den Token in der ursprünglichen Assembly übereinstimmen, bevor sie im Buildprozess zusammengeführt wurde.
Die ICorDebugModule::GetName-Methode gibt den Assemblynamen und keinen Dateipfad zurück.
Die ICorDebugModule::GetSize-Methode gibt die ursprüngliche nicht zusammengeführte Bildgröße zurück.
Die ICorDebugModule3.EnumerateContainedAssemblies-Methode gibt zurück
S_FALSE.Die ICorDebugAssembly3.GetContainerAssembly-Methode gibt das enthaltende Modul zurück.
Aus Modulen abgerufene Schnittstellen
Eine Vielzahl von Schnittstellen kann aus Modulen erstellt oder abgerufen werden. Dazu zählen:
Ein ICorDebugClass-Objekt, das von der ICorDebugModule::GetClassFromToken-Methode zurückgegeben wird.
Ein ICorDebugAssembly-Objekt, das von der ICorDebugModule::GetAssembly-Methode zurückgegeben wird.
Diese Objekte werden immer von ICorDebug zwischengespeichert, und sie haben dieselbe Zeigeridentität, unabhängig davon, ob sie aus dem Containermodul oder einem Untermodul erstellt oder abgefragt wurden. Das Untermodul bietet eine gefilterte Ansicht dieser zwischengespeicherten Objekte, nicht einen separaten Cache mit eigenen Kopien.
Teilen des virtuellen Moduls und der nicht verwalteten Debug-APIs
In der folgenden Tabelle wird gezeigt, wie sich die Aufteilung des virtuellen Moduls auf das Verhalten anderer Methoden in der nicht verwalteten Debug-API auswirkt.
| Methode | enableSplitting = true |
enableSplitting = false |
|---|---|---|
| ICorDebugFunction::GetModule | Gibt das Untermodul zurück, in dem diese Funktion ursprünglich definiert wurde | Gibt das Containermodul zurück, in dem diese Funktion zusammengeführt wurde. |
| ICorDebugClass::GetModule | Gibt das Untermodul zurück, in dem diese Klasse ursprünglich definiert wurde. | Gibt das Containermodul zurück, in dem diese Klasse zusammengeführt wurde. |
| ICorDebugModuleDebugEvent::GetModule | Gibt das containermodul zurück, das geladen wurde. Untermodule werden unabhängig von dieser Einstellung nicht über Ladeereignisse verfügen. | Gibt das containermodul zurück, das geladen wurde. |
| ICorDebugAppDomain::EnumerateAssemblies | Gibt eine Liste von Unterassemblys und regulären Assemblys zurück; Es sind keine Containerassemblys enthalten. Anmerkung: Wenn keine Containerassembly Symbole enthält, werden keine der Unterassemblys aufgezählt. Wenn bei einer regulären Assembly Symbole fehlen, kann sie aufgezählt werden. | Gibt eine Liste von Containerassemblys und regulären Assemblys zurück; Es sind keine Unterassemblys enthalten. Anmerkung: Wenn bei einer regulären Assembly Symbole fehlen, kann sie aufgezählt werden. |
| ICorDebugCode::GetCode (nur bei Verweisen auf IL-Code) | Gibt EINE IL zurück, die in einem Assemblyimage vor dem Zusammenführen gültig wäre. Insbesondere werden alle Inlinemetadatentoken ordnungsgemäß TypeRef- oder MemberRef-Token sein, wenn die typen, auf die verwiesen wird, nicht im virtuellen Modul definiert sind, das die IL enthält. Diese TypeRef- oder MemberRef-Token können im IMetaDataImport-Objekt für das entsprechende virtuelle ICorDebugModule Objekt nachschlagen. |
Gibt die IL im Assemblyimage nach dem Zusammenführen zurück. |
Anforderungen
Plattformen: Siehe .NET unterstützte Betriebssysteme.
Kopfball: CorDebug.idl, CorDebug.h
Bibliothek: CorGuids.lib
.NET-Versionen: Verfügbar seit .NET Framework 4.6