Udostępnij za pośrednictwem


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

Właściwości Wartość
Identyfikator reguły CA2243
Tytuł Literały ciągów atrybutów powinny być analizowane poprawnie.
Kategoria Użycie
Poprawka łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Nie.
Zastosowane języki C# i Visual Basic

Przyczyna

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

Opis reguły

Ponieważ atrybuty są pochodnymi System.Attribute, i 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 znaków.

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 'version' i nie mogą być skonwertowane na System.Version.

  • Parametry zawierające identyfikator 'guid', które nie mogą być przekształcone na System.Guid.

  • Parametry zawierające "uri", "urn" lub "url" i których nie można przetworzyć na System.Uri.

Zobacz też