Condividi tramite


CA2243: Valori letterali stringa di attributo devono essere analizzate correttamente

TypeName

AttributeStringLiteralsShouldParseCorrectly

CheckId

CA2243

Category

Microsoft.Usage

Breaking Change

Non sostanziale

Causa

Il parametro del valore letterale stringa di un attributo non analizza correttamente un URL, un GUID o una versione.

Descrizione della regola

Poiché gli attributi sono derivati da System.Attribute e vengono utilizzati in fase di compilazione, solo i valori costanti possono essere passati ai relativi costruttori. I parametri di attribuito che devono rappresentare URL, GUID e versioni non possono essere tipizzati come System.Uri, System.Guid e System.Version, perché questi tipi non possono essere rappresentati come costanti. Devono invece essere rappresentati da stringhe.

Poiché il parametro è tipizzato come stringa, è possibile che un parametro in formato non corretto venga passato in fase di compilazione.

Questa regola utilizza un'euristica di denominazione per individuare parametri che rappresentano un URI (Uniform Resource Identifier), un GUI (Globally Unique Identifier) o una versione e verifica che il valore passato sia corretto.

Come correggere le violazioni

Impostare la stringa del parametro su un URL, un GUID o una versione in formato corretto.

Esclusione di avvisi

L'esclusione di un avviso da questa regola è sicura se il parametro non rappresenta un URL, un GUID o una versione.

Esempio

Nell'esempio riportato di seguito è illustrato il codice per AssemblyFileVersionAttribute che viola questa regola.

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

La regola viene attivata da quanto segue:

  • Parametri che contengono "version" e non possono essere analizzati in System.Version.

  • Parametri che contengono "guid" e non possono essere analizzato in System.Guid.

  • Parametri che contengono "uri", "urn" o "url" e non possono essere analizzati in System.Uri.

Vedere anche

Riferimenti

CA1054: I parametri URI non devono essere stringhe