Share via


CA2243: Literais de cadeias de caracteres de atributo devem ser analisados corretamente

Property Valor
ID da regra CA2243
Título Literais de cadeias de caracteres de atributo devem ser analisados corretamente
Categoria Usage
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

O parâmetro literal da cadeia de caracteres de um atributo não é analisado corretamente para uma URL, um GUID ou uma versão.

Descrição da regra

Como os atributos são derivados de System.Attribute, e os atributos são usados em tempo de compilação, somente valores constantes podem ser passados para seus construtores. Parâmetros de atributo que devem representar URLs, GUIDs e Versões não podem ser tipados como System.Uri, System.Guid e System.Version, porque esses tipos não podem ser representados como constantes. Em vez disso, eles devem ser representados por cadeias de caracteres.

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

Essa regra usa uma heurística de nomenclatura para localizar parâmetros que representam um URI (identificador de recurso uniforme), um GUID (identificador global 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 representa uma URL, um GUID ou uma versão.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar 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 em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

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

Para obter mais informações, confira 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 é disparada pelos seguintes parâmetros:

  • Parâmetros que contêm “version” 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” e não podem ser analisados para System.Uri.

Confira também