CA2243: Literais de cadeia de caracteres de atributo devem analisar corretamente
Property | valor |
---|---|
ID da regra | CA2243 |
Título | 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 9 | Não |
Motivo
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 System.Uri, System.Guide , porque System.Versionesses tipos não podem ser representados como constantes. 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.