Freigeben über


Der Host bestimmt Ressourcen, die RID-spezifisch sind.

Beim Ausführen einer Anwendung mit spezifischen RESSOURCEN (Runtime Identifier, RID) bestimmt der Host, welche Ressourcen für die Plattform relevant sind, auf der sie ausgeführt wird. Dies gilt sowohl für die Anwendung selbst als auch für die Auflösungslogik, die von AssemblyDependencyResolver verwendet wird.

Zuvor hat der Host versucht, das RID zur Laufzeit zu berechnen und dann das RID-Diagramm zu lesen, um zu ermitteln, welche RID-spezifischen Ressourcen übereinstimmen oder mit dem berechneten RID kompatibel waren. Jetzt berechnet das Standardverhalten nicht das RID und verwendet den RID-Graphen nicht. Stattdessen nutzt der Host eine bekannte Liste von RIDs, die darauf basiert, wie die Laufzeitumgebung selbst erstellt wurde.

Vorheriges Verhalten

Zuvor war der Prozess für die Auswahl von RID-spezifischen Ressourcen:

  1. Lesen Sie das RID-Diagramm aus der .deps.json-Datei des Stammframeworks (Microsoft.NetCore.App).
  2. Berechnen Sie das aktuelle RID zur Laufzeit, und versuchen Sie, einen Eintrag für ihn im RID-Diagramm zu finden. Wenn es nicht vorhanden ist, überprüfen Sie, ob ein Fallback-RID existiert, das zum Zeitpunkt der Kompilierung in den Host integriert wurde.
  3. Suchen Sie ab dem Eintrag im RID-Diagramm nach Ressourcen, die diesem RID entsprechen.
  4. Es wurde mit der Liste der RIDs im RID-Diagrammeintrag fortgefahren, bis eine Ressourcenübereinstimmung gefunden wurde oder die Liste endete.

Wenn das RID-Diagramm den berechneten RID oder den Fallback RID nicht enthielt, wurden RID-Ressourcen nicht ordnungsgemäß aufgelöst.

Neues Verhalten

Standardmäßig basiert der Prozess nicht mehr auf dem RID-Diagramm. Stattdessen wird basierend darauf, wie der Host erstellt wurde, nach einem bekannten Satz tragbarer RIDs gesucht. Beispiel:

Linux (Englisch)

  • linux-x64
  • Linux
  • unix-x64
  • Unix
  • jegliche

Fenster

  • win-x64
  • gewinnen
  • jegliche

macOS

  • osx-x64
  • osx
  • unix-x64
  • Unix

Für nicht portierbare Builds des Hosts oder der Laufzeit kann der Build auch einen nicht portierbaren RID festlegen, der zuerst aktiviert wird.

Eingeführte Version

.NET 8 Vorschauversion 5

Art der einschneidenden Änderung

Diese Änderung kann sich auf binäre Kompatibilität auswirken und ist auch eine Verhaltensänderung.

Grund für Änderung

Das RID-Diagramm war aufwändig in der Pflege und im Verständnis und erforderte, dass .NET selbst auf anfällige Art und Weise distributionsabhängig ist. Das .NET-Team und die Community investieren erheblichen Aufwand, um das Diagramm zu aktualisieren und solche Updates auf frühere Veröffentlichungen zurückzuführen. Das langfristige Ziel besteht darin, die Aktualisierung des RID-Diagramms zu beenden, das Lesen zu beenden und schließlich zu entfernen. Diese bahnbrechende Änderung ist ein Schritt zu diesem Ziel.

Verwenden Sie tragbare RIDs, z. B. linux, linux-musl, osx und win. Für spezielle Anwendungsfälle können Sie APIs wie NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver) oder AssemblyLoadContext.ResolvingUnmanagedDll für benutzerdefinierte Ladelogik verwenden.

Wenn Sie auf das vorherige Verhalten zurücksetzen müssen, legen Sie den Abwärtskompatibilitätswechsel System.Runtime.Loader.UseRidGraphtrue in Ihrer runtimeconfig.json Datei fest. Indem der Schalter auf true gesetzt wird, wird der Host angewiesen, das vorherige Verhalten beim Lesen des RID-Diagramms zu verwenden. Alternativ können Sie die MSBuild-Eigenschaft UseRidGraph in Ihrer Projektdatei auf true festlegen. Beispiel:

<PropertyGroup>
  <UseRidGraph>true</UseRidGraph>
</PropertyGroup>

Betroffene APIs

Siehe auch