Genel bütünleştirilmiş kod önbelleği API'leri kullanımdan kaldırıldı

.NET Core ve .NET 5 ve sonraki sürümleri, .NET Framework'te mevcut olan genel derleme önbelleği (GAC) kavramını ortadan kaldırır. Bu nedenle, GAC ile ilgilenen tüm .NET Core ve .NET 5+ API'leri başarısız olur veya işlem gerçekleştirmez.

Geliştiricileri bu API'lerden uzaklaştırmaya yardımcı olmak için, GAC ile ilgili bazı API'ler eski olarak işaretlenir ve derleme zamanında bir SYSLIB0005 uyarı oluşturur. Bu API'ler .NET'in gelecekteki bir sürümünde kaldırılabilir.

Açıklama değiştirildi

Aşağıdaki API'ler kullanım dışı olarak işaretlenir.

API Eski olarak işaretlendi...
Assembly.GlobalAssemblyCache 5.0 RC1

.NET Framework 2.x - 4.x'te, GlobalAssemblyCache sorgulanan derleme GAC'den yüklendiyse ve false diskte farklı bir konumdan yüklendiyse özelliği döndürürtrue. .NET Core 2.x - 3.x'te, GlobalAssemblyCache GAC'nin .NET Core'da mevcut olmadığını yansıtan her zaman döndürür false.

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

.NET 5 ve sonraki sürümlerinde GlobalAssemblyCache özelliği her zaman döndürülmeye falsedevam eder. Ancak, özellik alıcısı, çağıranlara özelliğe erişmeyi durdurmaları gerektiğini belirtmek için eski olarak da işaretlenir. Kitaplıklar ve uygulamalar, her zaman .NET Core ve .NET 5 ve sonraki sürümlerde döndürdüğündenfalse, çalışma zamanı davranışı hakkında belirlemeler yapmak için API'yi kullanmamalıdırGlobalAssemblyCache.

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

Bu yalnızca derleme zamanı değişikliğidir. .NET Core'un önceki sürümlerinde çalışma zamanı değişikliği yoktur.

Değişiklik nedeni

Genel derleme önbelleği (GAC), .NET Core ve .NET 5 ve sonraki sürümlerde kavram olarak mevcut değildir.

Sürüm kullanıma sunulmuştur

.NET 5.0

  • Uygulamanız özelliği sorgularsa GlobalAssemblyCache çağrıyı kaldırmayı göz önünde bulundurun. Çalışma zamanında "GAC'deki derleme"-akış ile "GAC'de olmayan derleme" akışı arasında seçim yapmak için değerini kullanırsanız GlobalAssemblyCache , akışın .NET Core veya .NET 5+ uygulaması için hala anlamlı olup olmadığını yeniden düşünün.

  • Eski API'leri kullanmaya devam etmeniz gerekiyorsa, uyarıyı SYSLIB0005 kodda gizleyebilirsiniz.

    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.
    

    Ayrıca proje dosyanızda uyarıyı gizleyebilirsiniz ve bu da uyarıyı projedeki tüm kaynak dosyalar için devre dışı bırakır.

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

    Gizlenmesi SYSLIB0005 yalnızca kullanımdan kaldırılma uyarısını GlobalAssemblyCache devre dışı bırakır. Diğer uyarıları devre dışı bırakmaz.

Etkilenen API’ler