SYSLIB0003: Codezugriffssicherheit wird nicht unterstützt

Die Codezugriffssicherheit (Code Access Security, CAS) ist eine nicht unterstützte Legacytechnologie. Die dafür erforderliche Infrastruktur, die nur in .NET Framework 2.x bis 4.x enthalten ist, ist veraltet, und es sind keine Wartungs- oder Sicherheitsfixes dafür vorgesehen.

Aufgrund dessen sind die meisten der CAS-bezogenen Typen ab .NET 5 veraltet. Dies gilt auch für CAS-Attribute wie SecurityPermissionAttribute, CAS-Berechtigungsobjekte wie SocketPermission, von EvidenceBase abgeleitete Typen und weitere unterstützende APIs. Die Verwendung dieser APIs ruft zur Kompilierzeit die Warnung SYSLIB0003 hervor.

Die vollständige Liste der veralteten CAS-APIs lautet wie folgt:

Problemumgehung

  • Wenn Sie eine Sicherheitsberechtigung bestätigen, entfernen Sie das Attribut oder den Aufruf, der die Berechtigung bestätigt.

    // REMOVE the attribute below.
    [SecurityPermission(SecurityAction.Assert, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoAssert()
    {
        // REMOVE the line below.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert();
    }
    
  • Wenn Sie (über PermitOnly) eine beliebige Berechtigung verweigern oder einschränken, wenden Sie sich an Ihren Sicherheitsberater. Da die Runtime von .NET 5 oder höher keine CAS-Attribute berücksichtigt, kann Ihre Anwendung eine Sicherheitslücke aufweisen, wenn sie fälschlicherweise darauf angewiesen ist, dass die CAS-Infrastruktur den Zugriff auf diese Methoden einschränkt.

    // 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();
    }
    
  • Wenn Sie Berechtigungen anfordern (außer PrincipalPermission), entfernen Sie die Anforderung. Alle Anforderungen werden zur Laufzeit erfolgreich ausgeführt.

    // 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();
    }
    
  • Wenn Sie PrincipalPermission anfordern, lesen Sie den Leitfaden für SYSLIB0002: PrincipalPermissionAttribute ist veraltet. Dieser Leitfaden gilt sowohl für PrincipalPermission als auch für PrincipalPermissionAttribute.

Unterdrücken einer Warnung

Wenn Sie die veralteten APIs verwenden müssen, können Sie die Warnung im Code oder in Ihrer Projektdatei unterdrücken.

Um nur einen einzelnen Verstoß zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Warnung zu deaktivieren und dann wieder zu aktivieren.

// Disable the warning.
#pragma warning disable SYSLIB0003

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

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

Um alle SYSLIB0003-Warnungen in Ihrem Projekt zu unterdrücken, fügen Sie ihrer Projektdatei eine <NoWarn>-Eigenschaft hinzu.

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

Weitere Informationen finden Sie unter Unterdrücken von Warnungen.

Siehe auch