CA2243: Literały ciągu atrybutu powinny być analizowane poprawnie
TypeName |
AttributeStringLiteralsShouldParseCorrectly |
CheckId |
CA2243 |
Kategoria |
Microsoft.Usage |
Zmiana kluczowa |
Niekluczowa |
Przyczyna
Parametr o typie literału łańcuchowego atrybutu nie analizuje poprawnie adresu URL, identyfikatora GUID lub Wersji.
Opis reguły
Ponieważ atrybuty są pochodnymi Attribute i atrybuty są używane w czasie kompilacji, jedynie wartości stałe mogą być przekazane do ich konstruktorów.Parametry atrybutów, które muszą reprezentować adresy URL, identyfikatory GUID i wersje nie mogą być wpisane jako Uri, Guid, i Version, ponieważ te typy nie mogą być reprezentowane jako stałe.Zamiast tego muszą być reprezentowane jako ciągi.
Ponieważ parametr jest wpisany jako ciąg znaków, jest możliwe, że nieprawidłowo sformatowany parametr mógłby być przejść przez proces kompilacji.
Ta reguła używa heurystyki nazw aby znaleźć parametry, które reprezentują uniform resource identifier (URI), unikatowy identyfikator globalny (GUID) lub Wersję i sprawdza, że przekazana wartość jest prawidłowa.
Jak naprawić naruszenia
Należy zmienić parametr w postaci ciągu na poprawnie sformułowany adres URL, identyfikator GUID lub Wersję.
Kiedy pominąć ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie od tej reguły, jeśli parametr nie reprezentuje adresu URL, identyfikatora GUID ani Wersji.
Przykład
Poniższy przykład pokazuje kod dla AssemblyFileVersionAttribute, który narusza tą regułę.
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")]
}
Reguła zostanie wywołana przez następujące:
Parametry, które zawierają "version" i nie mogą być skonwertowane do System.Version.
Parametry, które zawierają "guid" i nie mogą być skonwertowane do System.Guid.
Parametry, które zawierają "uri", "urn", or "url" i nie mogą być skonwertowane do System.Uri.
Zobacz też
Informacje
CA1054: Parametry identyfikatora URI nie powinny być ciągami