다음을 통해 공유


SYSLIB0003: 코드 액세스 보안이 지원되지 않습니다.

CAS(코드 액세스 보안)는 지원되지 않는 레거시 기술입니다. CAS를 사용하도록 설정하는 인프라는 .NET Framework 2.x - 4.x에만 있고 사용되지 않으며 서비스 또는 보안 수정을 받지 않습니다.

따라서 .NET의 CAS(코드 액세스 보안) 관련 형식은 대부분 .NET 5부터 사용되지 않습니다. 여기에는 SecurityPermissionAttribute, CAS 권한 개체(예: SocketPermission), EvidenceBase 파생 형식 및 기타 지원되는 API와 같은 CAX 특성이 포함됩니다. 이러한 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를 통해 사용 권한을 거부하거나 제한하려면 보안 관리자에게 문의하세요. CAS 특성은 .NET 5 이상 런타임에 적용되지 않기 때문에 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>

자세한 내용은 경고 표시 안 함을 참조하세요.

참고 항목