다음을 통해 공유


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

.NET 코드 분석기 규칙 CA1417은 .NET 5부터 기본적으로 사용됩니다. String 매개 변수가 값으로 전달되고 OutAttribute로 표시된 P/Invoke(플랫폼 호출) 메서드 정의에 대해 빌드 경고를 생성합니다.

변경 내용 설명

.NET 5부터 .NET SDK에는 .NET 소스 코드 분석기가 포함됩니다. CA1417을 포함하여 해당 규칙 중 여러 개가 기본적으로 사용됩니다. 해당 규칙을 위반하는 코드가 프로젝트에 포함되고 프로젝트가 경고를 오류로 처리하도록 구성된 경우 해당 변경으로 인해 빌드의 호환성이 손상될 수 있습니다.

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

[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 분석을 통해 검색할 수 없습니다.