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.