Share via


SYSLIB0003: Kod erişim güvenliği desteklenmiyor

Kod erişim güvenliği (CAS) desteklenmeyen eski bir teknolojidir. Yalnızca .NET Framework 2.x - 4.x'te bulunan CAS'yi etkinleştirme altyapısı kullanım dışıdır ve bakım veya güvenlik düzeltmeleri almaz.

Sonuç olarak, .NET'teki kod erişim güvenliği (CAS) ile ilgili türlerin çoğu .NET 5'te başlayarak eskidir. Buna, SecurityPermissionAttribute, - türetilmiş türler ve diğer destekleyici API'ler gibi , EvidenceBaseCAS izin nesneleri gibi SocketPermissionCAS öznitelikleri dahildir. Bu API'lerin kullanılması derleme zamanında uyarı SYSLIB0003 oluşturur.

Eski CAS API'lerinin tam listesi aşağıdaki gibidir:

Geçici Çözümler

  • Herhangi bir güvenlik iznini onaylarsanız, izni onaylayan özniteliği veya çağrıyı kaldırın.

    // REMOVE the attribute below.
    [SecurityPermission(SecurityAction.Assert, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoAssert()
    {
        // REMOVE the line below.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert();
    }
    
  • Herhangi bir izni reddediyor veya kısıtlıyorsanız (aracılığıyla PermitOnly) güvenlik danışmanınıza başvurun. CAS öznitelikleri .NET 5+ çalışma zamanı tarafından kabul edilmediğinden, uygulamanızın bu yöntemlere erişimi kısıtlamak için YANLıŞLıKLA CAS altyapısına bağlı olması durumunda bir güvenlik deliği olabilir.

    // REVIEW the attribute below; could indicate security vulnerability.
    [SecurityPermission(SecurityAction.Deny, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoPermitOnly()
    {
        // REVIEW the line below; could indicate security vulnerability.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).PermitOnly();
    }
    
  • herhangi bir izin (hariç) PrincipalPermissiontalep ediyorsanız talebi kaldırın. Tüm talepler çalışma zamanında başarılı olur.

    // REMOVE the attribute below; it will always succeed.
    [SecurityPermission(SecurityAction.Demand, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoDemand()
    {
        // REMOVE the line below; it will always succeed.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Demand();
    }
    
  • talep ediyorsanız PrincipalPermissionSYSLIB0002: PrincipalPermissionAttribute kullanımdan kaldırıldı yönergelerine başvurun. Bu kılavuz hem hem PrincipalPermissionAttributede PrincipalPermission için geçerlidir.

Uyarıyı gizleme

Eski API'leri kullanmanız gerekiyorsa, uyarıyı kodda veya proje dosyanızda gizleyebilirsiniz.

Yalnızca tek bir ihlali engellemek için, önişlemci yönergelerini kaynak dosyanıza ekleyerek uyarıyı devre dışı bırakın ve sonra yeniden etkinleştirin.

// Disable the warning.
#pragma warning disable SYSLIB0003

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0003

Projenizdeki tüm SYSLIB0003 uyarıları engellemek için proje dosyanıza bir <NoWarn> özellik ekleyin.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0003</NoWarn>
  </PropertyGroup>
</Project>

Daha fazla bilgi için bkz . Uyarıları gizleme.

Ayrıca bkz.