Share via


CA2243: 특성 문자열 리터럴이 올바르게 구문 분석되어야 합니다.

속성
규칙 ID CA2243
타이틀 특성 문자열 리터럴이 올바르게 구문 분석되어야 합니다.
범주 사용 현황
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 아니요

원인

특성의 문자열 리터럴 매개 변수가 URL, GUID 또는 버전에 대해 올바르게 구문 분석하지 않습니다.

규칙 설명

특성이 System.Attribute에서 파생되고 컴파일 시간에 사용되므로 상수 값만 생성자에 전달할 수 있습니다. URL, GUID, 버전을 나타내야 하는 특성 매개 변수를 System.Uri, System.Guid, System.Version으로 형식화할 수 없습니다. 이러한 형식은 상수로 표현할 수 없기 때문입니다. 대신 문자열로 표현해야 합니다.

매개 변수가 문자열로 형식화되기 때문에 컴파일 시간에 형식이 잘못된 매개 변수가 전달될 수 있습니다.

이 규칙은 명명 휴리스틱을 사용하여 URI(Uniform Resource Identifier), GUID(Globally Unique Identifier) 또는 버전을 나타내는 매개 변수를 찾고 전달된 값이 올바른지 확인합니다.

위반 문제를 해결하는 방법

매개 변수 문자열을 올바른 형식의 URL, GUID 또는 버전으로 변경합니다.

경고를 표시하지 않는 경우

매개 변수가 URL, GUID 또는 버전을 나타내지 않는 경우 이 규칙의 경고를 표시하지 않아도 됩니다.

경고 표시 안 함

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

#pragma warning disable CA2243
// The code that's violating the rule is on this line.
#pragma warning restore CA2243

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none으로 설정합니다.

[*.{cs,vb}]
dotnet_diagnostic.CA2243.severity = none

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

예시

다음 예제에서는 이 규칙을 위반하는 AssemblyFileVersionAttribute에 대한 코드를 보여 줍니다.

[AttributeUsage(AttributeTargets.Assembly, Inherited = false)]
[ComVisible(true)]
public sealed class AssemblyFileVersionAttribute : Attribute
{
    public AssemblyFileVersionAttribute(string version) { }

    public string? Version { get; set; }
}

// Since the parameter is typed as a string, it is possible
// to pass an invalid version number at compile time. The rule
// would be violated by the following code: [assembly : AssemblyFileVersion("xxxxx")]

규칙은 다음 매개 변수에 의해 트리거됩니다.

  • ‘version’이 포함되고 System.Version으로 구문 분석할 수 없는 매개 변수

  • ‘guid’가 포함되고 System.Guid로 구문 분석할 수 없는 매개 변수

  • ‘uri’, ‘urn’ 또는 ‘url’이 포함되고 System.Uri로 구문 분석할 수 없는 매개 변수

참고 항목