CA2243: синтаксический анализ строковых литералов атрибута должен осуществляться правильно
Свойство | Значение |
---|---|
Идентификатор правила | CA2243 |
Заголовок | Синтаксический разбор строковых литералов должен осуществляться правильно |
Категория | Использование |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | No |
Причина
Не удается правильно выполнить синтаксический анализ параметра строкового литерала атрибута для URL-адреса, идентификатора GUID или версии.
Описание правила
Поскольку атрибуты являются производными от System.Attribute и используются во время компиляции, их конструкторам могут передаваться только постоянные значения. Параметры атрибутов, которые должны представлять URL-адреса, идентификаторы GUID и версии, не могут быть типизированы как System.Uri, System.Guid и System.Version, так как эти типы не могут быть представлены в виде констант. Он должны быть представлены строками.
Поскольку параметр типизирован как строка, возможно, что неправильно отформатированный параметр может быть передан во время компиляции.
Это правило использует эвристику именования для поиска параметров, представляющих универсальный код ресурса (URI), глобальный уникальный идентификатор (GUID) или версию, и проверяет правильность переданного значения.
Устранение нарушений
Измените строку параметра на 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.