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:
- Leggere il grafico RID dal file .deps.json del framework radice (Microsoft.NetCore.App).
- 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).
- A partire dalla voce presente nel grafico RID, cercare gli asset corrispondenti a tale RID.
- 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.
Azione consigliata
Usa RID portabili, ad esempio, linux
, linux-musl
osx
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 UseRidGraph
proprietà MSBuild su true
nel file del progetto. Ad esempio:
<PropertyGroup>
<UseRidGraph>true</UseRidGraph>
</PropertyGroup>