Nach this article ist eine erneute Speicherung für .NET-Assemblies aufgrund der JIT-Kompilierung des Codes nicht erforderlich. Der Artikel besagt:. NET-Assemblies und DLL-Neufassung
"JIT-compiled-Code hat kein Umgehungsproblem, da die Adressen zur Laufzeit basierend auf dem Speicherort des Codes generiert werden. MSIL wird selten von Basisadresse seit MSIL betroffen Referenzen sind tokenbasiert und nicht adressbasiert. Wenn also der JIT-Compiler verwendet wird, ist das System widerstandsfähig gegen Grundadressenkollisionen. "
aber ich habe bemerkt, dass VS2008 die Adresse Standard 0x0400000 Basis ordnet alle Baugruppen (Projekteigenschaften> Aufbau> Fortgeschrittene) und wenn ich ein listdlls /r
für meinen Prozess zu tun all meine .NET-Assemblies sind in der Tat pro Standard umbasiert.
Wenn ich selbst Adressen zuweise, wird keine Umbasierung durchgeführt.
Meine Frage ist: Was ist in diesem Fall rebased und warum?
EDIT: Ich sollte hinzufügen, dass ich nicht über NGen'ed Baugruppen sprechen.
Ich verstehe, dass es keinen Grund für die Korrekturen gibt, aber da wir Baugruppen von einem Netzlaufwerk laden, kann ein Rebasing aufgrund des Kopierens in den Auslagerungsdatei-Teil des Rebasings ein Problem werden. Jede Verbindung mit Details würde geschätzt werden. Vielen Dank. –
AFAIK, copy-to-pagefile ist das direkte Ergebnis dieser Korrekturen, da Seiten mit ausführbarem Code beschreibbar/privat für den Prozess werden, so dass das Betriebssystem sie nicht mehr direkt von der DLL laden kann. Meinst du das? – liggett78
Es gibt einen alten (scheint wie aus dem Mittelalter) aber noch wertvollen Artikel bei http://msdn.microsoft.com/en-us/library/ms810432.aspx von vor 13 Jahren über Rebasing (native code). – liggett78