Compartilhar via


CA2243: Literais de seqüência de caracteres de atributo devem analisar corretamente

TypeName

AttributeStringLiteralsShouldParseCorrectly

CheckId

CA2243

<strong>Categoria</strong>

Microsoft.Usage

Alteração significativa

Não separável

Causa

Parâmetro de literal de seqüência de caracteres do atributo não analisa corretamente para uma URL, um GUID ou uma versão.

Descrição da regra

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

Porque o parâmetro é digitado como uma seqüência de caracteres, é possível que pode ser passado um parâmetro formatado incorretamente no momento da compilação.

Esta regra usa uma heurística de nomenclatura para localizar os parâmetros que representam um identificador de recursos uniforme (URI), um globalmente identificador exclusivo (GUID) ou uma versão e verifica se o valor transmitido é correto.

Como corrigir violações

Altere a seqüência de parâmetro para um URL, GUID ou versão formada corretamente.

Quando suprimir avisos

É seguro eliminar um aviso esta regra se o parâmetro não representa uma URL, um GUID ou uma versão.

Exemplo

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

using System;
using System.Runtime.InteropServices;

namespace Samples
{
    [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 pelo seguinte:

  • 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 o GUID.

  • Parâmetros que contenham 'uri', 'urn' ou 'url' e não podem ser analisados para System. URI.

Consulte também

Referência

CA1054: Parâmetros da URI não devem ser seqüências de caracteres