Partilhar via


CA2243: Literais de cadeia de caracteres de atributo devem analisar corretamente

Propriedade valor
ID da regra CA2243
Cargo Os literais da cadeia de caracteres de atributo devem ser analisados corretamente
Categoria Utilização
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Não

Causa

O parâmetro literal de cadeia de caracteres de um atributo não analisa corretamente para uma URL, GUID ou Version.

Descrição da regra

Como os atributos são derivados de , e os atributos são usados em tempo de System.Attributecompilação, apenas valores constantes podem ser passados para seus construtores. Os parâmetros de atributo que devem representar URLs, GUIDs e Versões não podem ser digitados como , e , System.Guidporque System.Versionesses tipos não podem ser representados como System.Uriconstantes. Em vez disso, eles devem ser representados por cadeias de caracteres.

Como o parâmetro é digitado como uma cadeia de caracteres, é possível que um parâmetro formatado incorretamente possa ser passado em tempo de compilação.

Esta regra usa uma heurística de nomenclatura para localizar parâmetros que representam um URI (identificador uniforme de recurso), um GUID (Identificador Globalmente Exclusivo) ou uma versão e verifica se o valor passado está correto.

Como corrigir violações

Altere a cadeia de caracteres de parâmetro para uma URL, GUID ou Versão formada corretamente.

Quando suprimir avisos

É seguro suprimir um aviso dessa regra se o parâmetro não representar uma URL, GUID ou Version.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

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

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

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

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Exemplo

O exemplo a seguir mostra o código para o AssemblyFileVersionAttribute que viola essa regra.

[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")]

A regra é acionada pelos seguintes parâmetros:

  • Parâmetros que contêm 'versão' e não podem ser analisados para System.Version.

  • Parâmetros que contêm 'guid' e não podem ser analisados para System.Guid.

  • Parâmetros que contêm 'uri', 'urn' ou 'url' e não podem ser analisados para System.Uri.

Consulte também