Freigeben über


Globale Assemblycache-APIs sind veraltet

.NET Core und .NET 5 und höhere Versionen beseitigen das Konzept des globalen Assemblycaches (GAC), der in .NET Framework vorhanden war. Daher schlagen alle .NET Core- und .NET 5+-APIs, die mit dem GAC umgehen, entweder fehl oder führen keinen Vorgang aus.

Um Entwickler von diesen APIs wegzulenken, werden einige GAC-bezogene APIs als veraltet markiert und zur Kompilierungszeit eine SYSLIB0005 Warnung generiert. Diese APIs können in einer zukünftigen Version von .NET entfernt werden.

Änderungsbeschreibung

Die folgenden APIs sind als veraltet gekennzeichnet.

Programmierschnittstelle (API) Als veraltet markiert in...
Assembly.GlobalAssemblyCache 5.0 RC1

In .NET Framework 2.x - 4.x gibt die GlobalAssemblyCache Eigenschaft zurück true , ob die abgefragte Assembly aus dem GAC geladen wurde und false ob sie von einem anderen Speicherort auf dem Datenträger geladen wurde. In .NET Core 2.x - 3.x gibt GlobalAssemblyCache immer false zurück, was zeigt, dass das GAC nicht in .NET Core vorhanden ist.

Assembly asm = typeof(object).Assembly;
// Prints 'True' on .NET Framework, 'False' on .NET Core.
Console.WriteLine(asm.GlobalAssemblyCache);

In .NET 5 und höheren Versionen gibt GlobalAssemblyCache immer false zurück. Der Getter für die Eigenschaft ist jedoch ebenfalls als veraltet markiert, um Aufrufer darauf hinzuweisen, dass sie nicht mehr auf die Eigenschaft zugreifen sollen. Bibliotheken und Apps sollten die GlobalAssemblyCache API nicht verwenden, um Entscheidungen über das Laufzeitverhalten zu treffen, da sie in .NET Core und .NET 5 und höheren Versionen immer false zurückgibt.

Assembly asm = typeof(object).Assembly;
// Prints 'False' on .NET 5+; also produces warning SYSLIB0005 at compile time.
Console.WriteLine(asm.GlobalAssemblyCache);

Dies ist eine Änderung, die nur die Kompilierzeit betrifft. Es gibt keine Laufzeitänderung von früheren Versionen von .NET Core.

Grund für Änderung

Der globale Assemblycache (GAC) ist in .NET Core und .NET 5 und höheren Versionen nicht als Konzept vorhanden.

Eingeführte Version

.NET 5.0

  • Wenn Ihre Anwendung die GlobalAssemblyCache Eigenschaft abfragt, sollten Sie den Aufruf entfernen. Wenn Sie den GlobalAssemblyCache Wert verwenden, um zwischen einer "Assembly im GAC"-Fluss und einer "Assembly nicht im GAC"-Fluss zur Laufzeit zu wählen, sollten Sie überdenken, ob der Fluss für eine .NET Core- oder .NET 5+-Anwendung weiterhin sinnvoll ist.

  • Wenn Sie die veralteten APIs weiterhin verwenden müssen, können Sie die SYSLIB0005 Warnung im Code unterdrücken.

    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.
    

    Sie können auch die Warnung in der Projektdatei unterdrücken, wodurch die Warnung für alle Quelldateien im Projekt deaktiviert wird.

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
       <TargetFramework>net5.0</TargetFramework>
       <!-- NoWarn below will suppress SYSLIB0005 project-wide -->
       <NoWarn>$(NoWarn);SYSLIB0005</NoWarn>
      </PropertyGroup>
    </Project>
    

    Durch das Unterdrücken von SYSLIB0005 wird nur die Veraltungswarnung GlobalAssemblyCache deaktiviert. Es werden keine anderen Warnungen deaktiviert.

Betroffene APIs