Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| 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.