Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| Tulajdonság | Érték |
|---|---|
| Szabályazonosító | CA1303 |
| Cím | Ne adjon át literálokat honosított paraméterekként |
| Kategória | Globalizáció |
| A javítás kompatibilitástörő vagy nem törik | Nem törés |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Nem |
Ok
A metódus paraméterként átad egy sztringkonstanst egy .NET-konstruktornak vagy metódusnak, és ennek a sztringnek honosíthatónak kell lennie.
Ez a figyelmeztetés akkor jelenik meg, ha egy literális sztring értéket ad egy paraméternek vagy tulajdonságnak, és az alábbi helyzetek közül egy vagy több igaz:
A LocalizableAttribute paraméter vagy tulajdonság attribútuma a következőre
truevan állítva: .A literális sztring
string valueegy vagystring formattöbb metódus túlterhelésének vagy Console.Write paraméterének lesz átadvaConsole.WriteLine.A CA1303 szabály az elnevezési heurisztikus használatára van konfigurálva, és egy paraméter vagy tulajdonságnév tartalmazza az
Text,MessagevagyCaption.
Ez a szabály alapértelmezés szerint a teljes kódbázist elemzi, de ez konfigurálható.
Szabály leírása
A forráskódba beágyazott sztringkonstansokat nehéz honosítani.
Szabálysértések kijavítása
A szabály megsértésének kijavításához cserélje le a sztringkonstanst az osztály egy példányán ResourceManager keresztül lekért sztringre.
A honosított sztringeket nem igénylő metódusok esetében a ca1303 szükségtelen figyelmeztetéseit a következő módokon távolíthatja el:
- Ha az elnevezési heurisztikus beállítás engedélyezve van, nevezze át a paramétert vagy tulajdonságot.
- Távolítsa el az LocalizableAttribute attribútumot a paraméteren vagy tulajdonságon, vagy állítsa (
false) értékre[Localizable(false)].
Mikor kell letiltani a figyelmeztetéseket?
Ha az alábbi utasítások valamelyike érvényes, nyugodtan letilthatja a szabály figyelmeztetését:
- A kódtár nem honosított.
- A sztring nem érhető el a végfelhasználó vagy a kódtárat használó fejlesztő számára.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA1303
// The code that's violating the rule is on this line.
#pragma warning restore CA1303
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA1303.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Kód konfigurálása elemzéshez
A következő beállítások segítségével konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.
- Adott szimbólumok kizárása
- Adott típusok és származtatott típusok kizárása
- Elnevezési heurisztikus használata
Emellett a következő adatfolyam-elemzési lehetőségek vonatkoznak erre a szabályra:
- 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
Ezeket a beállításokat konfigurálhatja csak erre a szabályra, az összes szabályra, vagy az ebben a kategóriában szereplő összes szabályra (Globalization), amelyekre vonatkoznak. További információ: Kódminőségi szabály konfigurációs beállításai.
Adott szimbólumok kizárása
A excluded_symbol_names beállítással kizárhat bizonyos szimbólumokat, például típusokat és metódusokat az elemzésből. Ha például meg szeretné adni, hogy a szabály ne fusson a nevesített MyTypetípusok egyikén sem, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
Jegyzet
Cserélje le a XXXXCAXXXX részét a vonatkozó szabály azonosítójára.
Engedélyezett szimbólumnévformátumok a beállításértékben (a következővel |elválasztva):
- Csak szimbólumnév (a névvel ellátott összes szimbólumot tartalmazza, függetlenül attól, hogy milyen típusú vagy névtérrel rendelkezik).
- A szimbólum dokumentációazonosító-formátumában szereplő teljes nevek. Minden szimbólumnévhez szimbólum típusú előtag szükséges, például
M:metódusokhoz,T:típusokhoz ésN:névterekhez. -
.ctorkonstruktorok és.cctorstatikus konstruktorok számára.
Példák:
| Beállítás értéke | Összegzés |
|---|---|
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType |
Megegyezik az összes elnevezett MyTypeszimbólummal. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 |
Megegyezik az összes elnevezett MyType1 szimbólummal vagy MyType2. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) |
Megfelel a megadott metódusnak MyMethod a megadott teljes jogosultsággal rendelkező aláírással. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) |
Egyezik az adott metódusokkal MyMethod1 és MyMethod2 a megfelelő, teljes mértékben minősített aláírásokkal. |
Adott típusok és származtatott típusok kizárása
A excluded_type_names_with_derived_types beállítás beállításával kizárhat bizonyos típusokat és azok származtatott típusait az elemzésből. Ha például meg szeretné adni, hogy a szabály ne fusson a nevesített MyType és származtatott típusok egyik metódusán sem, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
Jegyzet
Cserélje le a XXXXCAXXXX részét a vonatkozó szabály azonosítójára.
Engedélyezett szimbólumnévformátumok a beállításértékben (a következővel |elválasztva):
- Csak típusnév (a névvel rendelkező összes típust tartalmazza, függetlenül attól, hogy milyen típust vagy névteret tartalmaz).
- A szimbólum dokumentációazonosító-formátumában szereplő teljes nevek opcionális
T:előtaggal.
Példák:
| Beállítás értéke | Összegzés |
|---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
Megfelel az összes névvel ellátott MyType típusnak és az összes származtatott típusnak. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
Megfelel az összes névvel ellátott MyType1 típusnak, vagy MyType2 az összes származtatott típusnak. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Egyezik MyType a megadott teljes névvel és az összes származtatott típusával. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 |
Egyezik az adott típusokkal MyType1 és MyType2 a megfelelő teljes névvel, valamint az összes származtatott típussal. |
Elnevezési heurisztikus használata
Beállíthatja, hogy a szabályt tartalmazó TextMessageCaption paraméterek vagy tulajdonságnevek aktiválják-e a szabályt.
dotnet_code_quality.CA1303.use_naming_heuristic = true
Példa
Az alábbi példa egy olyan metódust mutat be, amely akkor ír a konzolra, ha a két argumentum valamelyike kívül esik a tartományon.
hour Az argumentum-ellenőrzéshez a függvény egy literális sztringet Console.WriteLinead át, amely megsérti ezt a szabályt. Az argumentum-ellenőrzésnél a minute rendszer egy olyan sztringet ad ResourceManager át Console.WriteLine, amely megfelel a szabálynak.
<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));
}
}
}