Condividi tramite


CA1302: Non impostare come hardcoded le stringhe delle impostazioni locali

TypeName

DoNotHardcodeLocaleSpecificStrings

CheckId

CA1302

Category

Microsoft.Globalization

Breaking Change

Non sostanziale

Causa

Un metodo utilizza una stringa letterale che rappresenta parte del percorso di determinate cartelle di sistema.

Descrizione della regola

L'enumerazione System.Environment.SpecialFolder contiene membri che fanno riferimento a cartelle di sistema speciali. I percorsi di queste cartelle possono presentare valori diversi in sistemi operativi diversi. È possibile modificare alcuni dei percorsi e i percorsi sono localizzati. Un esempio di cartella speciale è la cartella di sistema, "C:\WINDOWS\system32" in Windows XP ma "C:\WINNT\system32" in Windows 2000. Il metodo Environment.GetFolderPath restituisce i percorsi associati all'enumerazione Environment.SpecialFolder. I percorsi restituiti dal metodo GetFolderPath sono localizzati e appropriati per il computer in uso.

Questa regola rappresenta in formato token i percorsi delle cartelle recuperati mediante il metodo GetFolderPath in livelli di directory separati. Ogni valore letterale stringa viene confrontato con i token. Se viene trovata una corrispondenza, viene presupposto che un metodo stia compilando una stringa che fa riferimento al percorso di sistema associato al token. A scopo di portabilità e localizzabilità, utilizzare il metodo GetFolderPath per recuperare i percorsi delle cartelle di sistema speciali anziché utilizzare stringhe letterali.

Come correggere le violazioni

Per correggere una violazione di questa regola, recuperare la posizione mediante il metodo GetFolderPath.

Esclusione di avvisi

L'esclusione di un avviso da questa regola è sicura se la stringa letterale non viene utilizzata per fare riferimento a uno dei percorsi di sistema associati all'enumerazione Environment.SpecialFolder.

Esempio

Nell'esempio riportato di seguito viene compilato il percorso della cartella Application Data comune, con conseguente generazione di tre avvisi da questa regola. Nell'esempio viene quindi recuperato il percorso mediante il metodo GetFolderPath.

Imports System

Namespace GlobalizationLibrary

   Class WriteSpecialFolders

      Shared Sub Main()

         Dim string0 As String = "C:"

         ' Each of the following three strings violates the rule.
         Dim string1 As String = "\Documents and Settings"
         Dim string2 As String = "\All Users"
         Dim string3 As String = "\Application Data"
         Console.WriteLine(string0 & string1 & string2 & string3)

         ' The following statement satisfies the rule.
         Console.WriteLine(Environment.GetFolderPath( _ 
            Environment.SpecialFolder.CommonApplicationData))

      End Sub

   End Class

End Namespace
using System;

namespace GlobalizationLibrary
{
   class WriteSpecialFolders
   {
      static void Main()
      {
         string string0 = "C:";

         // Each of the following three strings violates the rule.
         string string1 = @"\Documents and Settings";
         string string2 = @"\All Users";
         string string3 = @"\Application Data";
         Console.WriteLine(string0 + string1 + string2 + string3);

         // The following statement satisfies the rule.
         Console.WriteLine(Environment.GetFolderPath(
            Environment.SpecialFolder.CommonApplicationData));
      }
   }
}

Regole correlate

CA1303: Non passare valori letterali come parametri localizzati