Laut diesem Artikel ist ein Neuverorten von .NET-Assemblys aufgrund der JIT-Kompilierung des Codes nicht erforderlich. Der Artikel besagt:
"JIT-kompilierter Code hat kein Neuverortungsproblem, da die Adressen zur Laufzeit generiert werden, basierend darauf, wo der Code im Speicher platziert ist. Außerdem werden MSIL selten von Basisadressfehlern beeinflusst, da MSIL-Verweise tokenbasiert sind und nicht adressbasiert. Daher ist das System bei der Verwendung des JIT-Compilers widerstandsfähig gegen Basisadresskonflikte."
Allerdings habe ich festgestellt, dass VS2008 allen Assemblys standardmäßig die Basisadresse 0x0400000 zuweist (Projekteigenschaften > Build > Erweitert) und wenn ich ein listdlls /r
für meinen Prozess durchführe, werden tatsächlich alle meine .NET-Assemblys standardmäßig neu verortet.
Wenn ich die Adressen selbst zuweise, erfolgt kein Neuverorten.
Meine Frage lautet: Was wird in diesem Fall neu verortet und warum?
EDIT: Ich sollte hinzufügen, dass ich nicht von NGen-Assemblys spreche.