.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을 참조하세요.
코드 분석을 완전히 비활성화하려면 프로젝트 파일에서
EnableNETAnalyzers
를false
로 설정하십시오. 자세한 내용은 EnableNETAnalyzers를 참조하세요.
영향을 받는 API
API 분석을 통해 감지할 수 없습니다.
.NET