Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 leggere il grafico RID per determinare quali asset specifici del RID corrispondono o sono compatibili con il RID calcolato. Ora, il comportamento predefinito non calcola il RID né utilizza 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).
- Calcola il RID corrente in fase di esecuzione e prova a trovare una voce nel grafo 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.
- Scorrere lungo l'elenco di RID nell'entrata del grafico RID fino a trovare una corrispondenza dell'asset o fino alla fine dell'elenco.
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. Per esempio:
Linux
- linux-x64
- Linux
- unix-x64
- Unix
- qualunque
Finestre
- win-x64
- vincere / vittoria
- qualunque
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 Preview 5
Tipo di cambiamento che interrompe la compatibilità
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 sia in grado di riconoscere la distribuzione in modo fragile. Il team .NET e la community dedicano una quantità di tempo non semplice 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 radicale è un passo verso tale obiettivo.
Azione consigliata
Usare RID portabili, ad esempio , linuxlinux-musl, osxe 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, impostare l'opzione System.Runtime.Loader.UseRidGraph di compatibilità con le versioni precedenti su true nel file runtimeconfig.json . Impostare l'interruttore su true istruisce l'host a utilizzare il comportamento precedente di lettura del grafico RID. In alternativa, è possibile impostare la UseRidGraph proprietà MSBuild su true nel file di progetto. Per esempio
<PropertyGroup>
<UseRidGraph>true</UseRidGraph>
</PropertyGroup>