Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA1303 |
| Başlık | Harfleri yerelleştirilmiş parametreler olarak göndermeyin |
| Kategori | Globalleştirme |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
Neden
Bir yöntem, bir .NET oluşturucusuna veya yöntemine parametre olarak bir dize sabiti geçirir ve bu dize yerelleştirilebilir olmalıdır.
Sabit metin bir parametreye veya özelliğe değer olarak geçirildiğinde ve aşağıdaki durumlardan biri veya daha fazlası doğru olduğunda bu uyarı tetiklenir.
LocalizableAttribute parametresinin veya özelliğinin özniteliği olarak
trueayarlanır.Değişmez değer dizesi, bir Console.Write veya Console.WriteLine yöntemi aşırı yüklemesinin
string valueveyastring formatparametresine geçirilir.Kural CA1303, adlandırma buluşsalı kullanılacak şekilde yapılandırılmıştır ve bir parametre veya özellik adı
Text,MessageveyaCaptionifadesini içerir.
Varsayılan olarak, bu kural tüm kod tabanını analiz eder, ancak bu yapılandırılabilir.
Kural açıklaması
Kaynak koda gömülü sabit dize değerlerinin yerelleştirilmesi zordur.
İhlalleri düzeltme
Bu kural ihlalini düzeltmek için string sabitini, ResourceManager sınıfının bir örneği aracılığıyla alınan bir dizeyle değiştirin.
Yerelleştirilmiş dize gerektirmeyen yöntemler için, aşağıdaki yollarla gereksiz CA1303 uyarılarını ortadan kaldırabilirsiniz:
- Adlandırma yordamı seçeneği etkinse parametreyi veya özelliği yeniden adlandırın.
- Parametre veya özellik üzerindeki LocalizableAttribute özniteliğini kaldırın veya
false[Localizable(false)]olarak ayarlayın.
Uyarıların ne zaman bastırılması gerekiyor?
Aşağıdaki deyimlerden biri geçerliyse, bu kuraldan bir uyarıyı engellemek güvenlidir:
- Kod kitaplığı yerelleştirilmeyecek.
- Dize, kod kitaplığını kullanan son kullanıcıya veya geliştiriciye gösterilmez.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA1303
// The code that's violating the rule is on this line.
#pragma warning restore CA1303
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1303.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Kod çözümleme için konfigüre et
Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçenekleri kullanın.
- Belirli simgeleri hariç tutma
- Belirli türleri ve türetilmiş türlerini dışlama
- Adlandırma sezgisi kullanma
Ayrıca, bu kural için aşağıdaki veri akışı analiziyle ilgili seçenekler geçerlidir:
- interprocedural_analysis_kind
- max_interprocedural_lambda_or_local_function_call_chain
- max_interprocedural_method_call_chain
- points_to_analysis_kind
- copy_analysis
- zayıf KDF algoritması için yeterli İterasyon Sayısı
Bu seçenekleri yalnızca bu kural, uyguladıkları tüm kurallar veya bu kategorideki tüm kurallar (Genelleştirme) için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.
Belirli simgeleri hariç tutma
excluded_symbol_names seçeneğini ayarlayarak türler ve yöntemler gibi belirli simgeleri analizden hariç tutabilirsiniz. Örneğin, kuralın adlı MyTypetürlerdeki herhangi bir kodda çalışmaması gerektiğini belirtmek için, projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
Not
XXXX
CAXXXX bölümünü geçerli kuralın kimliğiyle değiştirin.
Seçenek değerinde izin verilen simge adı biçimleri (ile |ayrılmış):
- Yalnızca sembol adı (içerildiği tür veya ad alanından bağımsız olarak ada sahip tüm simgeleri içerir).
- Simgelerin dökümantasyon kimliği formatındaki tam adlar. Her sembol adı için, yöntemler için
M:, türler içinT:, ve ad alanları içinN:gibi bir sembol türü ön eki gerekir. -
.ctoroluşturucular ve.cctorstatik oluşturucular için.
Örnekler:
| Seçenek Değeri | Özet |
|---|---|
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType |
adlı MyTypetüm simgelerle eşleşir. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 |
MyType1 veya MyType2 adlı tüm simgelerle eşleşir. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) |
Belirtilen tam imza ile belirli bir yöntemi MyMethod eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) |
Belirli yöntemlerle MyMethod1 ve MyMethod2 ilgili tam imzalarla eşleşir. |
Belirli türleri ve türetilmiş türlerini dışlama
excluded_type_names_with_derived_types seçeneğini ayarlayarak belirli türleri ve türetilmiş türlerini analizden dışlayabilirsiniz. Örneğin, kuralın adlı MyType ve türetilmiş türleri içindeki hiçbir yöntemde çalışmaması gerektiğini belirtmek için, projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
Not
XXXX
CAXXXX bölümünü geçerli kuralın kimliğiyle değiştirin.
Seçenek değerinde izin verilen simge adı biçimleri (ile |ayrılmış):
- Yalnızca tür adı (içeren tür veya ad alanına bakılmaksızın adı olan tüm türleri içerir).
- Simgenin belge kimliği biçiminde, isteğe bağlı
T:ön ek içeren tam adlar.
Örnekler:
| Seçenek değeri | Özet |
|---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
Adı MyType olan tüm türleri ve türevlerini eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
MyType1 veya MyType2 adlı tüm türleri ve bunların türetilmiş türlerinin tamamını eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Belirli bir türü MyType verilen tam adla ve türetilmiş tüm türleriyle eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 |
Belirli türler MyType1 ve MyType2 ile bunların türetilmiş tüm türleri, ilgili tam adlarla eşleşir. |
Adlandırma heuristiğini kullanma
Parametrelerin veya Text, Message veya Caption içeren özellik adlarının bu kuralı tetikleyip tetiklemeyeceğini yapılandırabilirsiniz.
dotnet_code_quality.CA1303.use_naming_heuristic = true
Örnek
Aşağıdaki örnekte, iki bağımsız değişkenden biri aralık dışında olduğunda konsola yazan bir yöntem gösterilmektedir. Bağımsız değişken denetimi için, bir değişmez dize hour'dan Console.WriteLine'e aktarılır ve bu, kuralı ihlal eder.
minute bağımsız değişken denetimi için, bir ResourceManager aracılığıyla alınan dize, kuralı karşılayan Console.WriteLine fonksiyonuna geçirilir.
<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));
}
}
}