L'host determina gli asset specifici del RID

Quando si esegue un'applicazione con asset specifici dell'identificatore di runtime (RID), l'host determina quali asset sono rilevanti per la piattaforma in cui è in esecuzione. Questo vale sia per l'applicazione stessa che per la logica di risoluzione usata da AssemblyDependencyResolver.

In precedenza, l'host ha tentato di calcolare il RID in fase di esecuzione e quindi di leggere il grafico RID per determinare quali asset specifici del RID corrispondevano o erano compatibili con il RID calcolato. Ora il comportamento predefinito non calcola il RID o usa il grafico RID. L'host si basa invece su un elenco noto di RID in base alla modalità di compilazione del runtime stesso.

Comportamento precedente

In precedenza, il processo per la selezione di asset specifici del RID era:

  1. Leggere il grafico RID dal file .deps.json del framework radice (Microsoft.NetCore.App).
  2. Calcolare il RID corrente in fase di esecuzione e provare a trovare una voce nel grafico RID. Se non esiste, verificare la presenza di un RID di fallback (integrato nell'host in fase di compilazione).
  3. A partire dalla voce presente nel grafico RID, cercare gli asset corrispondenti a tale RID.
  4. Continuare nell'elenco di RID nella voce del grafico RID fino a quando non viene trovata una corrispondenza di asset o l'elenco termina.

Se il grafico RID non ha il RID calcolato o il RID di fallback, gli asset RID non sono stati risolti correttamente.

Nuovo comportamento

Per impostazione predefinita, il processo non si basa più sul grafico RID. Controlla invece la presenza di un set noto di RID portabili in base alla modalità di compilazione dell'host. Ad esempio:

Linux

  • linux_x64
  • linux
  • unix-x64
  • unix
  • qualsiasi

Finestre

  • win-x64
  • win
  • qualsiasi

macOS

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

Per le build non portabili dell'host o del runtime, la compilazione potrebbe anche impostare un RID non portabile controllato per primo.

Versione introdotta

.NET 8 anteprima 5

Tipo di modifica che causa un'interruzione

Questa modifica può influire sulla compatibilità binaria ed è anche una modifica comportamentale.

Motivo della modifica

Il grafico RID era costoso da gestire e comprendere, richiedendo che .NET stesso fosse in grado di riconoscere la distribuzione in modo fragile. Il team .NET e la community dedicano una quantità di tempo non indifferente all'aggiornamento del grafico e al backporting di tali aggiornamenti alle versioni precedenti. L'obiettivo a lungo termine è interrompere l'aggiornamento del grafico RID, interrompere la lettura e infine rimuoverlo. Questa modifica che causa un'interruzione è un passo verso tale obiettivo.

Usa RID portabili, ad esempio, linux, linux-muslosx e win. Per casi d'uso specializzati, è possibile usare API come NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver) o AssemblyLoadContext.ResolvingUnmanagedDll per la logica di caricamento personalizzata.

Se è necessario ripristinare il comportamento precedente, imposta l'opzione di compatibilità con le versioni precedenti System.Runtime.Loader.UseRidGraph su true nel file runtimeconfig.json. L'impostazione dell'opzione su true indica all'host di usare il comportamento precedente della lettura del grafico RID. In alternativa, è possibile impostare la UseRidGraphproprietà MSBuild su true nel file del progetto. Ad esempio:

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

API interessate

Vedi anche