Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA1303 |
| Název | Nepředávejte literály jako lokalizované parametry |
| Kategorie | Globalizace |
| Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
| Povoleno ve výchozím nastavení v .NET 10 | No |
Příčina
Metoda předá řetězcový literál jako parametr konstruktoru nebo metodě .NET a tento řetězec by měl být lokalizovatelný.
Toto upozornění se vyvolá, když se literálový řetězec předá jako hodnota parametru nebo vlastnosti a jedna nebo více následujících situací je pravdivá:
Atribut LocalizableAttribute parametru nebo vlastnosti je nastaven na
true.Literálový řetězec se předá
string valuenebostring formatparametr Console.Write přetížení metody.Console.WriteLinePravidlo CA1303 je nakonfigurováno tak, aby používalo heuristické pojmenování a název parametru nebo vlastnosti obsahuje frázi
Text,MessageneboCaption.
Ve výchozím nastavení toto pravidlo analyzuje celý základ kódu, ale dá se nakonfigurovat.
Popis pravidla
Řetězcové literály vložené do zdrojového kódu se obtížně lokalizují.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla, nahraďte řetězcový literál řetězcem načteným prostřednictvím instance ResourceManager třídy.
U metod, které nevyžadují lokalizované řetězce, můžete eliminovat zbytečná upozornění CA1303 následujícími způsoby:
- Pokud je povolená heuristická možnost pojmenování, přejmenujte parametr nebo vlastnost.
-
LocalizableAttribute Odeberte atribut u parametru nebo vlastnosti nebo ho nastavte na
false([Localizable(false)]).
Kdy potlačit upozornění
Pokud platí některý z následujících příkazů, je bezpečné potlačit upozornění z tohoto pravidla:
- Knihovna kódu nebude lokalizována.
- Řetězec není vystavený koncovému uživateli nebo vývojáři pomocí knihovny kódu.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1303
// The code that's violating the rule is on this line.
#pragma warning restore CA1303
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1303.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Konfigurace kódu pro analýzu
Pomocí následujících možností můžete nakonfigurovat, pro které části základu kódu se má toto pravidlo spouštět.
- Vyloučení konkrétních symbolů
- Vyloučení konkrétních typů a jejich odvozených typů
- Použití heuristického pojmenování
Kromě toho platí pro toto pravidlo následující možnosti související s analýzou toku dat:
- interprocedural_analysis_kind
- max_interprocedural_lambda_or_local_function_call_chain
- max_interprocedural_method_call_chain
- points_to_analysis_kind
- copy_analysis
- sufficient_IterationCount_for_weak_KDF_algorithm
Tyto možnosti můžete nakonfigurovat pouze pro toto pravidlo, pro všechna pravidla, která platí pro, nebo pro všechna pravidla v této kategorii (globalizace), na která se vztahují. Další informace naleznete v tématu Možnosti konfigurace pravidla kvality kódu.
Vyloučení konkrétních symbolů
Z analýzy můžete vyloučit konkrétní symboly, jako jsou typy a metody, nastavením možnosti excluded_symbol_names. Pokud chcete například určit, že pravidlo by se nemělo spouštět u žádného kódu v rámci pojmenovaných MyTypetypů, přidejte do souboru .editorconfig v projektu následující dvojici klíč-hodnota:
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
Poznámka
Nahraďte XXXX část CAXXXX ID příslušného pravidla.
Povolené formáty názvů symbolů v hodnotě možnosti (oddělené ):|
- Pouze název symbolu (zahrnuje všechny symboly s názvem bez ohledu na typ nebo obor názvů).
- Plně kvalifikované názvy ve formátu ID dokumentace symbolu. Každý název symbolu vyžaduje předponu typu symbolu, například
M:pro metody,T:typy aN:obory názvů. -
.ctorpro konstruktory a.cctorstatické konstruktory.
Příklady:
| Hodnota možnosti | Shrnutí |
|---|---|
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType |
Odpovídá všem symbolům s názvem MyType. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 |
Porovná všechny symboly pojmenované buď MyType1 nebo MyType2. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) |
Odpovídá konkrétní metodě MyMethod se zadaným plně kvalifikovaným podpisem. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) |
Odpovídá konkrétním metodám MyMethod1 a MyMethod2 příslušným plně kvalifikovaným podpisům. |
Vyloučení konkrétních typů a jejich odvozených typů
Konkrétní typy a jejich odvozené typy můžete vyloučit z analýzy nastavením možnosti excluded_type_names_with_derived_types. Pokud chcete například určit, že pravidlo by se nemělo spouštět u žádné metody v rámci pojmenovaných MyType typů a jejich odvozených typů, přidejte do souboru .editorconfig v projektu následující dvojici klíč-hodnota:
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
Poznámka
Nahraďte XXXX část CAXXXX ID příslušného pravidla.
Povolené formáty názvů symbolů v hodnotě možnosti (oddělené ):|
- Pouze název typu (zahrnuje všechny typy s názvem bez ohledu na typ nebo obor názvů).
- Plně kvalifikované názvy ve formátu ID dokumentace symbolu s volitelnou
T:předponou.
Příklady:
| Hodnota možnosti | Shrnutí |
|---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
Odpovídá všem pojmenovaným MyType typům a všem jejich odvozeným typům. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
Odpovídá všem typům pojmenovaným buď MyType1 nebo MyType2 a všem jejich odvozeným typům. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Odpovídá určitému typu MyType s daným plně kvalifikovaným názvem a všemi jeho odvozenými typy. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 |
Odpovídá konkrétním typům MyType1 a MyType2 příslušným plně kvalifikovaným názvům a všem jejich odvozeným typům. |
Použití heuristického pojmenování
Můžete nakonfigurovat, zda parametry nebo názvy vlastností obsahují Text, Messagenebo Caption aktivuje toto pravidlo.
dotnet_code_quality.CA1303.use_naming_heuristic = true
Příklad
Následující příklad ukazuje metodu, která zapisuje do konzoly, když některý z jejích dvou argumentů je mimo rozsah. Pro kontrolu argumentu hour se předá Console.WriteLineřetězec literálu, který porušuje toto pravidlo. Pro kontrolu argumentu minute se předá ResourceManagerřetězec načtený prostřednictvím operátoru Console.WriteLine , který splňuje pravidlo.
<Assembly: System.Resources.NeutralResourcesLanguageAttribute("en-US")>
Namespace GlobalizationLibrary
Public Class DoNotPassLiterals
Dim stringManager As System.Resources.ResourceManager
Sub New()
stringManager = New System.Resources.ResourceManager(
"en-US", System.Reflection.Assembly.GetExecutingAssembly())
End Sub
Sub TimeMethod(hour As Integer, minute As Integer)
If (hour < 0 Or hour > 23) Then
'CA1303 fires because a literal string
'is passed as the 'value' parameter.
Console.WriteLine("The valid range is 0 - 23.")
End If
If (minute < 0 Or minute > 59) Then
Console.WriteLine(
stringManager.GetString("minuteOutOfRangeMessage",
System.Globalization.CultureInfo.CurrentUICulture))
End If
End Sub
End Class
End Namespace
public class DoNotPassLiterals
{
ResourceManager stringManager;
public DoNotPassLiterals()
{
stringManager = new ResourceManager("en-US", Assembly.GetExecutingAssembly());
}
public void TimeMethod(int hour, int minute)
{
if (hour < 0 || hour > 23)
{
// CA1303 fires because a literal string
// is passed as the 'value' parameter.
Console.WriteLine("The valid range is 0 - 23.");
}
if (minute < 0 || minute > 59)
{
Console.WriteLine(stringManager.GetString(
"minuteOutOfRangeMessage", CultureInfo.CurrentUICulture));
}
}
}