다음을 통해 공유


경고 CA1417: 문자열 매개 변수에 대한 P/Invoke의 OutAttribute

.NET 코드 분석기 규칙 CA1417 은 기본적으로 .NET 5부터 사용하도록 설정됩니다. 값으로 전달되고 로 표시된 매개 변수가 있는 모든 String 메서드 정의에 대해 OutAttribute 빌드 경고를 생성합니다.

변경 내용 설명

.NET 5부터 .NET SDK에는 .NET 소스 코드 분석기가 포함됩니다. CA1417을 포함하여 이러한 규칙 중 일부는 기본적으로 사용하도록 설정됩니다. 프로젝트에 이 규칙을 위반하는 코드가 포함되어 있고 경고를 오류로 처리하도록 구성된 경우 이 변경으로 인해 빌드가 중단됩니다.

규칙 CA1417은 매개 변수가 특성으로 표시되고 값으로 String 전달되는 OutAttribute 메서드 정의에 플래그를 지정합니다. 다음은 그 예입니다.

[DllImport("MyLibrary")]
private static extern void PIMethod([Out] string s);

.NET 런타임은 프로그램의 각 고유한 리터럴 문자열에 대한 단일 참조를 포함하는 인턴 풀이라는 테이블을 유지 관리합니다. 표시된 OutAttribute 인턴 문자열이 값으로 P/Invoke 메서드에 전달되는 경우 런타임을 불안정하게 만들 수 있습니다. 문자열 인턴링에 대한 자세한 내용은 String.Intern(String)의 비고를 참조하세요.

도입된 버전

5.0

  • 수정된 문자열 데이터를 호출자에게 다시 마샬링해야 하는 경우 대신 참조로 문자열을 전달합니다.

    [DllImport("MyLibrary")]
    private static extern void PIMethod(out string s);
    
  • 수정된 문자열 데이터를 호출자에게 다시 마샬링할 필요가 없는 경우 간단히 제거합니다 OutAttribute.

    [DllImport("MyLibrary")]
    private static extern void PIMethod(string s);
    

    자세한 내용은 CA1417을 참조하세요.

  • 코드 분석을 완전히 비활성화하려면 프로젝트 파일에서 EnableNETAnalyzersfalse로 설정하십시오. 자세한 내용은 EnableNETAnalyzers를 참조하세요.

영향을 받는 API

API 분석을 통해 감지할 수 없습니다.