APIs für den globalen Assemblycache sind veraltet

.NET Core und .NET 5 sowie höhere Versionen verzichten auf das Konzept des globalen Assemblycaches (GAC), das in .NET Framework vorhanden war. Daher treten bei allen APIs für .NET Core und .NET 5 sowie höhere Versionen im Zusammenhang mit dem GAC Fehler auf, oder die APIs führen keinen Vorgang aus.

Einige GAC-bezogene APIs werden als veraltet markiert und generieren zur Kompilierzeit die Warnung SYSLIB0005, damit Entwickler zunehmend andere APIs verwenden. Diese APIs werden unter Umständen aus zukünftigen Versionen von .NET entfernt.

Änderungsbeschreibung

Die folgenden APIs sind als veraltet markiert.

API Als veraltet markiert in...
Assembly.GlobalAssemblyCache 5.0 RC1

In .NET Framework 2.x bis 4.x gibt die Eigenschaft GlobalAssemblyCachetrue zurück, wenn die abgefragte Assembly aus dem GAC geladen wurde. false wird zurückgegeben, wenn die Assembly aus einem anderen Speicherort auf dem Datenträger geladen wurde. In .NET Core 2.x bis 3.x gibt GlobalAssemblyCache immer false zurück, was deutlich macht, dass der GAC in .NET Core nicht 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 die Eigenschaft GlobalAssemblyCache auch weiterhin 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 beim Festlegen des Laufzeitverhaltens verwenden, da diese in .NET Core und .NET 5 sowie 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. Hinsichtlich der Laufzeit gibt es keine Änderung im Vergleich zu früheren Versionen von .NET Core.

Grund für die Änderung

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

Eingeführt in Version

.NET 5.0

  • Wenn die Anwendung die GlobalAssemblyCache-Eigenschaft abfragt, sollten Sie den Aufruf entfernen. Wenn Sie den GlobalAssemblyCache-Wert verwenden, um zur Laufzeit zwischen Flows zu wählen, bei denen sich die Assembly entweder im GAC oder nicht im GAC befindet, sollten Sie sich überlegen, ob der Flow für eine .NET Core- oder .NET 5-Anwendung (oder höher) noch sinnvoll ist.

  • Wenn Sie die veralteten APIs weiterhin verwenden müssen, können Sie die Warnung SYSLIB0005 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 die Warnung auch in Ihrer 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. Andere Warnungen werden nicht deaktiviert.

Betroffene APIs