Le API Global Assembly Cache sono obsolete
.NET Core e .NET 5 e versioni successive eliminano il concetto di Global Assembly Cache (GAC) che era presente in .NET Framework. Di conseguenza, tutte le API .NET Core e .NET 5 e versioni successive che gestiscono la GAC hanno esito negativo o non eseguono alcuna operazione.
Per aiutare gli sviluppatori a prendere le distanza da queste API, alcune API correlate alle GAC sono contrassegnate come obsolete e generano un avviso SYSLIB0005
in fase di compilazione. Queste API potrebbero essere rimosse in una versione futura di .NET.
Descrizione delle modifiche
Le API seguenti sono contrassegnate come obsolete.
API | Contrassegnata come obsoleta in... |
---|---|
Assembly.GlobalAssemblyCache | 5.0 RC1 |
In .NET Framework 2.x - 4.x, la proprietà GlobalAssemblyCache fornisce true
come risultato se l'assembly sottoposto a query è stato caricato dalla GAC e false
se è stato caricato da un percorso diverso sul disco. In .NET Core 2.x - 3.x, la proprietà GlobalAssemblyCache fornisce sempre false
come risultato, in ciò rispecchiando la non esistenza di GAC in .NET Core.
Assembly asm = typeof(object).Assembly;
// Prints 'True' on .NET Framework, 'False' on .NET Core.
Console.WriteLine(asm.GlobalAssemblyCache);
In .NET 5 e versioni successive la proprietà GlobalAssemblyCache continua a fornire false
come risultato in ogni evenienza. Tuttavia, anche il getter della proprietà viene contrassegnato come obsoleto per indicare ai chiamanti che devono interrompere l'accesso alla proprietà. Le librerie e le app non devono usare l'API GlobalAssemblyCache per determinare il comportamento in fase di esecuzione, perché in .NET Core e .NET 5 e versioni successive questa fornisce sempre false
come risultato.
Assembly asm = typeof(object).Assembly;
// Prints 'False' on .NET 5+; also produces warning SYSLIB0005 at compile time.
Console.WriteLine(asm.GlobalAssemblyCache);
Questa modifica riguarda solo la fase di compilazione. Non è stata apportata alcuna modifica in fase di esecuzione rispetto alle versioni precedenti di .NET Core.
Motivo della modifica
La Global Assembly Cache (GAC) non esiste come concetto in .NET Core e .NET 5 e versioni successive.
Versione introdotta
.NET 5.0
Azione consigliata
Se l'applicazione esegue una query sulla proprietà GlobalAssemblyCache, provare a rimuovere la chiamata. Se si usa il valore GlobalAssemblyCache per scegliere tra un "assembly nel flusso GAC" e un "assembly non nel flusso GAC" in fase di esecuzione, riconsiderare se il flusso ha ancora senso per un'applicazione .NET Core o .NET 5 e versioni successive.
Se è necessario continuare a uare le API obsolete, è possibile eliminare l'avviso
SYSLIB0005
nel codice.Assembly asm = typeof(object).Assembly; #pragma warning disable SYSLIB0005 // Disable the warning. // Prints 'False' on .NET 5+. Console.WriteLine(asm.GlobalAssemblyCache); #pragma warning restore SYSLIB0005 // Re-enable the warning.
È anche possibile eliminare l'avviso nel file di progetto, disabilitandolo così per tutti i file di origine nel progetto.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- NoWarn below will suppress SYSLIB0005 project-wide --> <NoWarn>$(NoWarn);SYSLIB0005</NoWarn> </PropertyGroup> </Project>
L'eliminazione di
SYSLIB0005
disabilita solo l'avviso GlobalAssemblyCache di obsolescenza. Nessun altro avviso viene disabilitato.