共用方式為


SYSLIB0003:不支援程式碼存取安全性

程式碼存取安全性 (CAS) 是不受支援的舊版技術。 啟用 CAS 的基礎結構 (僅存在於 .NET Framework 2.x - 4.x 中) 已被取代,且不會接收服務或安全性修正程式。

因此,.NET 中大部分的程式碼存取安全性 (CAS) 相關型別從 .NET 5 開始已過時。 這包括 SecurityPermissionAttribute 在內的 CAS 屬性、包括 SocketPermissionEvidenceBase 在內的 CAS 權限物件、衍生類型,以及其他支援的 API。 使用這些 API 會在編譯時期產生警告 SYSLIB0003

過時 CAS API 的完整清單如下所示:

因應措施

  • 如果您要判斷提示任何安全性權限,請移除判斷提示權限的屬性或呼叫。

    // REMOVE the attribute below.
    [SecurityPermission(SecurityAction.Assert, ControlThread = true)]
    public void DoSomething()
    {
    }
    public void DoAssert()
    {
        // REMOVE the line below.
        new SecurityPermission(SecurityPermissionFlag.ControlThread).Assert();
    }
    
  • 如果您要拒絕或限制任何權限 (透過 PermitOnly),請連絡安全顧問。 由於 .NET 5+ 執行階段不接受 CAS 屬性,因此,如果應用程式不正確地依賴 CAS 基礎結構以限制對這些方法的存取,可能會出現安全性漏洞。

    // 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();
    }
    
  • 如果您需要任何權限 (PrincipalPermission 除外),請移除需求。 所有需求在執行階段都會成功。

    // 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();
    }
    
  • 如果您需要 PrincipalPermission,請參閱 SYSLIB0002:PrincipalPermissionAttribute 已過時的指引。 PrincipalPermissionPrincipalPermissionAttribute 均適用該指引。

隱藏警告

若您必須使用已淘汰的 API,您可以在程式碼或專案檔中隱藏警告。

若要只隱藏單一違規,請將前置處理器指示詞新增至原始程式碼檔案,以停用並重新啟用警告。

// Disable the warning.
#pragma warning disable SYSLIB0003

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

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

若要隱藏專案中的所有 SYSLIB0003 警告,請將 <NoWarn> 屬性新增至專案檔。

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

如需詳細資訊,請參閱隱藏警告

另請參閱