Udostępnij za pośrednictwem


CA2243: Literały ciągu atrybutu powinny być analizowane poprawnie

Właściwości Wartość
Identyfikator reguły CA2243
Tytuł Analiza literałów ciągów atrybutów powinna przebiegać poprawnie
Kategoria Użycie
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Nie.

Przyczyna

Parametr literału ciągu atrybutu nie analizuje poprawnie adresu URL, identyfikatora GUID lub wersji.

Opis reguły

Ponieważ atrybuty pochodzą z System.Attributeelementu , a atrybuty są używane w czasie kompilacji, do ich konstruktorów można przekazywać tylko stałe wartości. Parametry atrybutu, które muszą reprezentować adresy URL, identyfikatory GUID i wersje, nie mogą być wpisywane jako System.Uri, System.Guidi System.Version, ponieważ te typy nie mogą być reprezentowane jako stałe. Zamiast tego muszą być reprezentowane przez ciągi.

Ponieważ parametr jest typowany jako ciąg, możliwe, że w czasie kompilacji może zostać przekazany niepoprawnie sformatowany parametr.

Ta reguła używa heurystyki nazewnictwa do znajdowania parametrów reprezentujących jednolity identyfikator zasobu (URI), globalnie unikatowy identyfikator (GUID) lub wersję oraz sprawdza, czy przekazana wartość jest poprawna.

Jak naprawić naruszenia

Zmień ciąg parametru na poprawnie sformułowany adres URL, identyfikator GUID lub wersję.

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć ostrzeżenie z tej reguły, jeśli parametr nie reprezentuje adresu URL, identyfikatora GUID lub wersji.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykład

Poniższy przykład przedstawia kod atrybutu AssemblyFileVersionAttribute, który narusza tę regułę.

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

Reguła jest wyzwalana przez następujące parametry:

  • Parametry zawierające wartość "version" i nie mogą być analizowane do pliku System.Version.

  • Parametry zawierające identyfikator guid i nie mogą być analizowane do pliku System.Guid.

  • Parametry zawierające wartość "URI", "urn" lub "url" i nie mogą być analizowane na wartość System.Uri.

Zobacz też